我有一個DateTime存儲在世界時間(UTC)值2010-01-01 01:01:01。datetime與時區字符串
我想在EST這種格式2010-01-01 04顯示出來:01:01GMT,04:00,但是 'K' 格式化的時區不工作的ToString
我有一個DateTime存儲在世界時間(UTC)值2010-01-01 01:01:01。datetime與時區字符串
我想在EST這種格式2010-01-01 04顯示出來:01:01GMT,04:00,但是 'K' 格式化的時區不工作的ToString
使用「ZZZ」格式說明,以獲得UTC偏移。例如:
var dt = new DateTime(2010, 1, 1, 1, 1, 1, DateTimeKind.Utc);
string s = dt.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss \"GMT\"zzz");
Console.WriteLine(s);
輸出: 2009-12-31 19點01分01秒格林尼治標準時間06:00
我在CDT時區。確保DateTime明確DateTimeKind.Utc。
格林威治標準時間沒有歧義夏時制。它不改變夏時制。 – 2015-12-05 01:40:27
我認爲您正在尋找TimeZoneInfo
班(請參閱http://msdn.microsoft.com/en-us/library/system.timezoneinfo_members.aspx)。它有許多靜態方法來轉換時區之間的日期。
類似這樣的工作。你也許可以清理多一點:
string newDate = string.Format("{0:yyyy-MM-dd HH:mm:ss} GMT {1}", dt.ToLocalTime(), dt.ToLocalTime().ToString("%K"));
你可能意味着'HH',而不是'hh'。 – Sasha 2017-03-06 10:42:34
可能......「hh」給出了12小時制結果,其中「HH」給出了軍事時間結果。 – Robaticus 2017-03-07 13:31:52
Robaticus,我的意思是12小時格式與您答案的其餘部分不兼容,因爲您沒有指定AM/PM。即應該加上't' /'tt'來使'hh'有意義(例如'02:00 AM','03:00 PM'),或者'hh'應該替換爲'HH'來產生24小時格式(例如'02:00','15:00')。所以'yyyy-MM-dd hh:mm:ss'格式產生的模糊輸出不能被解碼回來:(。 – Sasha 2017-03-07 14:04:42
此方法將返回在東部標準時間指定時間(作爲問題的要求),即使EST不在本地時區:
public string GetTimeInEasternStandardTime(DateTime time)
{
TimeZoneInfo easternStandardTime = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTimeOffset timeInEST = TimeZoneInfo.ConvertTime(time, easternStandardTime);
return timeInEST.ToString("yyyy-MM-dd hh:mm:ss tt\" GMT\"zzz");
}
注:我沒有測試過這個非英語操作系統。請參閱TimeZoneInfo.FindSystemTimeZoneById上的MSDN文檔。
@Sasha這是一個好點,這個答案之前並沒有消除AM和PM之間的歧義。在時間格式字符串中添加「tt」以添加AM/PM。根據您的評論,您可以用「HH」替代「hh」以使用24小時制(從00到23)輸出小時數。 – 2017-03-06 14:46:01
您是否有世界時(UTC)或格林威治標準時間(GMT)的時間? – Guffa 2010-07-23 23:46:55
對不起,錯字 – Comma 2010-07-23 23:58:06