jak ustawic zmienna DateTime żeby przetrzymywala tylko miesiąc i rok

0

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));

0
DateTime dt = DateTime.Now;  
Console.WriteLine(dt.Month.ToString() + "/" + dt.Year.ToString());  
0

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());
1

A jak chcesz w zmiennej DateTime przechowywać tylko rok i miesiąc? Możesz z niej ewentualnie to wyświetlić

2

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.

0

ź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 ?

3

Tak, przechowujesz w zmiennej typu DateTime, a wyświetlając robisz np. : Console.WriteLine(dt.ToString("YYYY-MM"));

0

ale ja tego nie wyświetlam w consoli tylko w oknie wpf :)

1

Co za różnica? ToString jest takie samo.

0

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 ?

0

Zapewne dlatego, że praca.DataZadania jest typu DateTime (sądząc po tym, że konwertujesz to na datę), a powinna być typu String.

0

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.

0

powinna być string w tylko w bazie, tylko w kodzie ,czy w bazie i w programie ?

0

Zmień ten typ DateTime na string i po problemie

2

Jak dla mnie, to w bazie i w kodzie powinno być DateTime, a string tylko podczas wyświetlania.

0

Widzę że debata trwa, mimo że prawidłowe rozwiązanie zostało już dawno pokazane :)

2

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.

1
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

2

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1