Niedawno pisałem na temat konwersji dat na wartości liczbowe i odwrotnie, wykorzystując komendy serwera SQL (w tym wypadku serwer Microsoft SQL Server). Pokazałem jak stworzyć storowane procedury, które będą ułatwiały te przekształcenia. Jednak przydatna może okazać się konwersja na liczbę jeszcze w aplikacji, przed zapisaniem jej do bazy.
Artykuł powiązany: MS SQL Konwersja dat na liczby i odwrotnie
.Net udostępnia obiekty DateTime oraz TimeSpan, których metody właściwie w całości rozwiązują nasz problem. W przykładzie, który napiszę przy wykorzystaniu C#, zmienna start oznaczać będzie czas początkowy. Umówmy się, że to będzie 2001-01-01.
Zadeklarujmy więc zmienną, jednocześnie nadając jej czas początkowy:
DateTime start = new DateTime(2001, 01, 01);
long elapsed = DateTime.Now.Ticks - start.Ticks;
TimeSpan diff = new TimeSpan(elapsed);
MessageBox.Show(diff.TotalDays.ToString());
Efekt:

Część całkowita reprezetuje ilość dni, które upłynęłu (bo było TotalDays), część ułamkowa przechowuje część dnia, który trwa. Wartość 0.5 oznaczać będzie godzinę dwunastą (bo pół doby).
Zróbmy więc z tego funckję, którą zwróci nam czas podany w parametrze. Odrzucę części ułamkowę, interesuje mnie zapis ilości dni, które minęły. Całośc więc wygląda tak:
public static int DateTimeToDays(DateTime toConvert) { DateTime start = new DateTime(2001, 01, 01); long elapsed = toConvert.Ticks - start.Ticks; TimeSpan diff = new TimeSpan(elapsed); return (int)diff.TotalDays; }
MessageBox.Show(DateTimeToDays(DateTime.Now).ToString());
|
|