2016-04-04 28 views
1

我在C#中的變量日期,我創建使用C#創建新的datetime

var date = new DateTime(2000, 01, 01) 

日期的結果01/01/2000 - >這是月/日/年

我想要的結果是格式日期/月/年

我知道我可以格式化這一個..但是有沒有另一種方法可以自動格式日期/月/年格式日期?

+4

日期是數值。他們沒有*格式*。您將格式設置爲便於人們閱讀。 'date'不包含任何文本內容,並且沒有格式。 –

+0

所以,你們都意味着它是月/日/年格式的日期的默認值。要更改爲日期/月/年,我必須手動格式化日期變量? – gill23

+0

@ gill23,系統默認日期格式取決於您的操作系統的語言設置。如果您選擇了英式英語,則會將其格式設置爲「dd/mm/yyyy」。 – Saleem

回答

1

In .net日期格式基於您的機器本地化。所以你有兩個選擇。

1)更改您的機器語言和文化設置。

2)更改線程CultureInfo以呈現正確的合成日期。

欲瞭解更多信息,請參閱https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.110).aspx

+0

是的,我知道這種方法,但會出現錯誤,因爲我的機器和客戶端機器有不同的設置..我只是想從代碼的角度知道。但是,謝謝你的評論 – gill23

+0

那麼,你可以玩技巧。找到客戶的文化並進行相應設置。如果你有asp.net應用程序,你可以很容易地做到這一點。 – Saleem

+0

@ gill23 - 「bug」是什麼意思? – Enigmativity

6

如果您在源代碼中查找該DateTime類型,你會發現這條線的.NET架構:

private ulong dateData; 

這就是DateTime的存儲方式。沒有格式。

從您的代碼new DateTime(2000, 01, 01)開始,該DateTime的基礎值爲630822816000000000

但是,當你去顯示一個日期時,如果.ToString()產生了630822816000000000而不是像01/01/2000之類的東西,那將是非常無益的。

所以,還是在源代碼,你會發現這個覆蓋:

public override string ToString() 
{ 
    return DateTimeFormat.Format(this, (string) null, DateTimeFormatInfo.CurrentInfo); 
} 

有效地,.ToString()方法使用格式化日期當前區域性的信息。

你總是可以做到這一點,以確保獲得一致的結果:

var date = new DateTime(2000, 4, 16); 

var us = date.ToString(CultureInfo.GetCultureInfo("en-us")); 
var au = date.ToString(CultureInfo.GetCultureInfo("en-au")); 

這導致在分別採用以下格式:

 
4/16/2000 12:00:00 AM 
16/04/2000 12:00:00 AM