2009-06-25 28 views
5

W języku C# jeśli chcę analizować datetime, ale czasami po prostu mieć albo datę, a nie składnika czasu lub na czas, ale komponent czasowy, w jaki sposób mogę to zrobić? Zwykle, gdy pominiesz komponent czasu, automatycznie przyjmuje on, że godzina jest godzina 12:00. Ale nie chcę tego. Jeśli brakuje komponentu czasu, po prostu chcę, aby DateTime zapisywał tylko datę i pozostawił komponent czasu wyłączony.DateTime W języku C#

Odpowiedz

17

Wartość DateTime wewnętrznie jest tylko UInt64 (ulong w C#), która przechowuje liczbę kleszczy ponieważ niektóre daty w przeszłości, więc czy ci się to podoba czy nie, składnik czas zawsze będzie tam.

+1

+1, DateTime to naprawdę mnóstwo metod użytkowych owiniętych wokół wartości integralnej. –

+0

Wewnętrzna wartość jest w rzeczywistości niepodpisana, ale ma niewielką różnicę jeśli chodzi o użycie. – Noldorin

2

DateTime definicji przechowuje datę i czas, tak, że nie można po prostu stanowią jeden z nich bez reprezentujący drugą. Jeśli chcesz tylko datę (lub tylko czas), przeanalizuj potrzebne informacje i odrzuć resztę.

6

To nie jest możliwe, aby mieć DateTime bez składnika czasu. Można zapisać flagę boolowską wraz z nią w pliku struct, aby przechowywać dane o istnieniu tego komponentu. Jednak nie ma możliwości użycia automatycznej procedury analizowania w celu rozróżnienia ciągu znaków DateTime z czasem określonym jako 12:00 PM i nieistniejącym.

+0

To jest to, czego potrzebuje. –

5

czy to naprawdę błędy, które zawsze można utworzyć klasy otoki, które można ukryć odcinki czasowe klasy datetime.

0

Można mieć klasę, która przechowuje DateTime i określa, czy kiedykolwiek był czas ustawiony lub jeśli po prostu data została ustalona i zwracają wartości odpowiednio.

0

Obiekt DateTime zawsze przechowuje datę + czas, a nie tylko jeden. Zawsze możesz pracować tylko z częścią daty, tzn. Używać tylko takich właściwości, jak Rok, Miesiąc, DzieńOfWeek. Ale pod spodem będzie trochę czasu.

8

Jeśli trzeba tylko wyświetlaczu niektórych części, wystarczy użyć dowolnego ciągi formatu (przykłady są dla "en-us" kultury):

DateTime.Now.ToString("d"); // 5/26/2009 
DateTime.Now.ToString("t"); // 4:56 PM 

Kompletny referencyjny: http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

0

użyj

DateTime date = new DateTime(); 
date = DateTime.Parse("1/1/2001"); 

aby ustawić datę, a następnie użyć

date.ToShortDateString(); 

lub

date.Year; 
date.Month; 
date.Day; 

aby uzyskać to, czego potrzebują. Mam nadzieję, że pomaga!

1

Jak wspomniano wcześniej DateTime zawsze będzie mieć datę i razem część niej, jeśli chcesz tylko jedna część wykorzystać sposób opisany przez innych

DateTime date = DateTime.Parse("2009-11-30); 
date.Year; = 2009 
date.Month; = 11 
date.Day; = 30 
date.Hour; = 0 
and so on 

Rzecz musi mieć świadomość, że wszystko te metody zwrócą tylko liczbę całkowitą.

Jeśli chcesz poznać wszystkie możliwe sposoby analizowania ciągu znaków, John Sheehan przygotował świetną Cheat Sheet wit all possible ways to parse and manipulate dates i inne ciągi w tym zakresie.

0

Bardzo niebezpieczne jest założenie, że część daty w postaci DateTime jest koniecznie datą, której się spodziewasz. Jak wskazano, DateTime zawsze uwzględnia i uwzględnia aspekt czasu, nawet gdy go nie widzisz.

Jest to duży problem, gdy dane są przechowywane w różnych strefach czasowych (a zwłaszcza jeśli nie jest zachowana wiedza o tym przesunięciu, ponieważ zakłada się, że to, co jest przechowywane, jest datą, a nie datą z -czas).

Możesz przechowywać datę urodzin jako "01/01/2000 00:00:00" w okresie letnim, która następnie jest przechowywana w UCT jako "31/12/1999 23:00:00". Kiedy później przeczytasz tę datę urodzenia, porcja jest teraz dzień wcześniej.

Najlepiej stworzyć własny typ. Dziwne, że Microsoft nie uważał, że warto mieć typ Date.

Powiązane problemy