A idea Dlaczego rok pojawia się jako ?DateTime.Now.ToUniversalTime() Ma niepoprawny rok
Kultura miejscu Thai
A idea Dlaczego rok pojawia się jako ?DateTime.Now.ToUniversalTime() Ma niepoprawny rok
Kultura miejscu Thai
Tak - każdy czas DateTime
jest konwertowana na ciąg bez wyraźnej kultury określony, będzie używać systemu kalendarza bieżącego kultura jest. Jednak komponenty DateTime
same nadal odzwierciedlają kalendarz gregoriański.
Zobaczysz 2555, jeśli używasz:
int thaiYear = new ThaiBuddhistCalendar().GetYear(DateTime.Now);
Zasadniczo, jeśli chcesz otrzymywać aktualne informacje specyficzne kulturowo programowo, trzeba użyć System.Globalization.Calendar
. Podczas formatowania daty upewnij się, że określasz odpowiednią kulturę dla kalendarza, którego chcesz użyć.
Ale dlaczego ma dwie różne wartości, "2555 i 2012"? Czy nie powinni oni być 2555 czy to samo? – Kaf
@Kaf: Nie, ponieważ, jak powiedziałem w drugim zdaniu mojej odpowiedzi, 'DateTime' samo w sobie zawsze zgłasza wartości zgodnie z kalendarzem gregoriańskim. Wartość 'DateTime' nie" wie ", do którego kalendarza ma być interpretowana, więc zawsze zakłada Gregorian. –
@Kaf Konwersja na ciąg używa bieżącego kalendarza, ale właściwości takie jak "Rok" nie. – CodesInChaos
Tajowie mają inny kalendarz.
Pozwolę sobie zacytować:
There is a 543 years difference between the Buddhist calendar and the Gregorian calendar. Year 2012 in Europe is year 2555 in Thailand.
Jako marginesie: Użycie 'DateTime.UtcNow' zamiast' DateTime.Now.ToUniversalTime() '. Jest szybszy i czystszy. – CodesInChaos