Witam
Mam zmienna datazadania ktora jest DateTime i w bazie tez jest DateTime , jak zrobic zeby po wyciagnieciu calej daty przechowywac w niej tylko miesiac i rok ?
praca.DataZadania = Convert.ToDateTime(rdr.GetString(3));
Witam
Mam zmienna datazadania ktora jest DateTime i w bazie tez jest DateTime , jak zrobic zeby po wyciagnieciu calej daty przechowywac w niej tylko miesiac i rok ?
praca.DataZadania = Convert.ToDateTime(rdr.GetString(3));
DateTime dt = DateTime.Now;
Console.WriteLine(dt.Month.ToString() + "/" + dt.Year.ToString());
ale ja potrzebuje zeby datazadania byla typu DateTime a ty pokazujesz sposob ze stringiem , zrobilem tak jak ponizej i nadal nie ma oczekiwanego efektu ?
DateTime date = Convert.ToDateTime(rdr.GetString(3));
praca.DataZadania = Convert.ToDateTime(date.Month.ToString()+"/"+ date.Year.ToString());
A jak chcesz w zmiennej DateTime przechowywać tylko rok i miesiąc? Możesz z niej ewentualnie to wyświetlić
Nie ma takiej możliwości,aby w obiekcie DateTime przechowywać tylko miesiąc i rok. Możesz za to ustawić sobie pozostałe parametry takie jak dzień, godzina, minuta itd, na jakąś stałą wartość np. pierwszy dzień miesiąca, godzina: 0000:0000. W tedy będziesz mógł operować bez problemu na latach oraz miesiącach bez konieczności uwzględniania dni oraz godzin.
źle się wyraziłem chce przechowywać całą datę a wyświetlać miesiąc i rok, ale zmienna która wyświetlam i w której przechowuje wartość jest typu DateTime ?
Tak, przechowujesz w zmiennej typu DateTime
, a wyświetlając robisz np. : Console.WriteLine(dt.ToString("YYYY-MM"));
ale ja tego nie wyświetlam w consoli tylko w oknie wpf :)
Co za różnica? ToString
jest takie samo.
pomimo ze jak zrobie poniżej tak jak wspomniales to w dalszym ciągu w w widoku jest cala data dzień miesiąc rok i godzina
praca.DataZadania = Convert.ToDateTime(date.Month.ToString()+"/"+ date.Year.ToString());
mało tego w bazie w selekcie mam ustawione date_format() i tez nie działa ?
Zapewne dlatego, że praca.DataZadania
jest typu DateTime
(sądząc po tym, że konwertujesz to na datę), a powinna być typu String
.
Ale w jakim widoku?
Pokaż kod, który wyświetla praca.DataZadania
. Tutaj próbujesz to jakoś nadpisać, ale to nie ma sensu, ani związku z widokiem.
powinna być string w tylko w bazie, tylko w kodzie ,czy w bazie i w programie ?
Zmień ten typ DateTime na string i po problemie
Jak dla mnie, to w bazie i w kodzie powinno być DateTime
, a string
tylko podczas wyświetlania.
Widzę że debata trwa, mimo że prawidłowe rozwiązanie zostało już dawno pokazane :)
Uwaga. poniższe rozwiązanie nie powinno być stosowane :) Grozi martwicą mózgu w przypadku nadużywania.
Dodaj do klasy praca
public string DataZadaniaString
{
get
{
return DataZadania.ToString("YYYY-MM");
}
}
I wyświetlaj w oknie DataZadaniaString.
public static class DateTimeExtensions
{
public static string OneFormatToRuleThemAll(this DateTime dt)
{
return dt.ToString("yyyy-MM-dd");
}
public static string OneFormatToRuleThemAllWithHours(this DateTime dt)
{
return dt.ToString("yyyy-MM-dd HH:mm");
}
}
aby być konsekwentnym
Jeżeli chcesz zmieniać format danych tylko przy wyświetlaniu WPF udostępnia konwertery. Implementuje się je za pomocą interfejsu IValueConverter lub IMultiValueConverter (to pierwsze jest dla CIebie).
https://www.wpf-tutorial.com/data-binding/value-conversion-with-ivalueconverter/
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
w parametrze "value" znajdzie się obiekt do którego następuje powiązanie (binding)
Jeżeli bindujesz do typu DateTime w TextBlocku wyświetli się DateTime.ToString().
Z pomocą konwertera możesz wykonać operacje i zwrócić tylko miesiąc i dzień lub co tylko zechcesz