2012-12-21 60 views
-3

此代碼返回給我'M/d/yyyy'但我需要'mm/dd/yyyy'這是怎麼回事?如何通過文化獲得短日期

((CultureInfo)Session["culture"]).DateTimeFormat.ShortDatePattern) 
+0

不確定要了解:您希望從文化中獲得格式,並且您希望返回固定的硬編碼格式? – ken2k

+0

如果您希望它返回特定的格式,您需要先將其設置。 (但它沒有任何意義)。 '(CultureInfo的)會議[ 「文化」])。DateTimeFormat。ShortDatePattern =「mm/dd/yyyy」' – mipe34

+0

不,我需要的格式不是2012/12/21,我需要12/21/2012 – Mediator

回答

0

您可以覆蓋如何日期通過指定ToString方法所需的模板顯示:

DateTime.Now.ToString("MM/dd/yyyy")) //Will display "12/21/2012" 

你似乎是使用CultureInfo對象,其中包含默認格式(和其他文化信息如貨幣)並由操作系統提供。

調用本身DateTime.Now.ToShortDateString()將使用ShortDatePattern在當前線程的文化規定的格式,可以用類似設置:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
1

這不到風度讓很多,因爲......你想要的圖案是針對特定文化.. 例如:

DateTime.Now.ToString(CultureInfo.GetCultureInfo("en-US").DateTimeFormat.ShortDatePattern); 

將返回mm/dd/yyyy

DateTime.Now.ToString(CultureInfo.GetCultureInfo("en-GB").DateTimeFormat.ShortDatePattern); 

將返回dd/mm/yyyy

從您添加的代碼,這不是很清楚的 - 似乎你得到一個特定的文化,但隨後想覆蓋ShortDatePattern ...

如果這是真的,爲什麼要用文化在接收首先會議?使用任何你想要的模式,而不考慮文化。 例如DateTime.Now.ToString("MM/dd/yyyy");

(不管怎麼說,這是可能的覆蓋,爲ShortDatePattern可以設置,就像@ mipe34在評論中顯示)

+0

你是否認爲他們都是en-US? – Guvante

+0

@Guvante哇,很好的抓住:)改變了第二個en-GB ... – Blachshma

0

你的意思是你要更改的屬性?這是簡單的:

((CultureInfo)Session["culture"]).DateTimeFormat.ShortDatePattern = "MM/dd/yyyy"; 

但是,如果CultureInfo恰好是隻讀的,它會拋出運行時。在這種情況下,也許你可以指定一個新的CultureInfo對象?如果可以的話,像這樣做:

// get reference 
var ci = (CultureInfo)Session["culture"]; 
// clone and reassign to get rid of read-only: 
ci = (CultureInfo)(ci.Clone()); 
// change property: 
ci.DateTimeFormat.ShortDatePattern = "MM/dd/yyyy"; 
// make read-only again 
ci = CultureInfo.ReadOnly(ci); 
// assign back to your "source": 
Session["culture"] = ci; 

之後,當人們稱someDateTimeValue.ToShortDateString()一些新的線程,其CurrentCultureSession["culture"]拍攝,他們將得到新的格式。

注:"m""mm"分鐘"M""MM"個月"/"也是文化的DateSeparator(這可能會翻譯成破折號(-)或某些文化中的其他內容)。