2011-09-07 218 views
4

我有一個日期/時間字符串,看起來像以下:格式化日期/時間在C#

Wed Sep 21 2011 12:35 PM Pacific 

我如何格式化一個DateTime到這個樣子?

謝謝!

+1

我一直使用這個傢伙的備忘單:http://blog.stevex.net/string-formatting-in-csharp/ –

+3

它總是*太平洋?因爲我不相信.NET DateTime格式會爲您提供時區*名稱*。 –

回答

9

時區前位很容易,用custom date and time format string

string text = date.ToString("ddd MMM dd yyyy hh:mm t"); 

不過,我相信.NET日期/時間格式化會給你「太平洋」的一部分。它可以給你的最好的時區是,從UTC時間偏移。這很好,如果你能以其他方式獲得時區名稱。

許多TimeZoneInfo標識符包括字太平洋,但沒有一個只是「太平洋」。

+1

給24小時和上午/下午不是多餘的嗎? :P – Brandon

+0

+1,偏移量-8可能並不總是太平洋 - 許多命名區域共享相同的偏移量,並且DateTime/DateTimeOffset不存儲它。 –

+0

@布蘭登:是的,呃。當然,它可能還是* 24 *小時 - 我們不能說。 (已經有格式的冗餘,當然是星期幾的名字。) –

6
string.Format("{0} {1}", DateTime.Now.ToString("ddd MMM dd yyyy HH:mm tt"), TimeZone.CurrentTimeZone.StandardName); 
//Result: Wed Sep 07 2011 14:29 PM Pacific Standard Time 

如果您不想顯示標準時間,請關閉標準時間。

編輯: 如果您需要遍佈整個地方,您還可以擴展日期時間以包含一個方法來爲您完成此操作。

void Main() 
{ 
    Console.WriteLine(DateTime.Now.MyCustomToString()); 
} 

// Define other methods and classes here 
public static class DateTimeExtensions 
{ 
    public static string MyCustomToString(this DateTime dt) 
    { 
     return string.Format("{0} {1}", DateTime.Now.ToString("ddd MMM dd yyyy HH:mm tt"), TimeZone.CurrentTimeZone.StandardName).Replace(" Standard Time", string.Empty); 
    } 
} 

您可以在LinqPad中直接複製並粘貼並在程序模式下運行該示例。

更多修改

後從下面這是更新版本的意見。

void Main() 
{ 
    Console.WriteLine(DateTime.Now.MyCustomToString()); 
} 

// Define other methods and classes here 
public static class DateTimeExtensions 
{ 
    public static string MyCustomToString(this DateTime dt) 
    { 
     return string.Format("{0:ddd MMM dd yyyy hh:mm tt} {1}", DateTime.Now, TimeZone.CurrentTimeZone.StandardName).Replace(" Standard Time", string.Empty); 
    } 
} 
+1

有沒有必要同時混合String.Format和ToString。您可以在一次調用中完成所有操作:'String.Format(「{0:ddd MMM dd yyyy HH:mm tt} {1}」,DateTime.Now,TimeZone.CurrentTimeZone.StandardName)' –

+0

哦,哎呀。 'HH'應該是'hh'12小時。 –

+0

是的,我更喜歡那個,謝謝。 –

2

請注意,這可能有點粗糙,但它可能會導致你在正確的方向。

以和添加到什麼喬恩提到:

string text = date.ToString("ddd MMM dd yyyy hh:mm t"); 

然後沿着這些線路增加一些:

TimeZone localZone = TimeZone.CurrentTimeZone; 
    string x = localZone.StandardName.ToString(); 
    string split = x.Substring(0,7); 
    string text = date.ToString("ddd MMM dd yyyy hh:mm t") + " " + split; 

我沒有測試過,但我希望它能幫助!