2017-07-24 30 views
0

給定特定的TimeZoneInfo實例如何在指定的時區創建新的DateTime實例?例如,如果我有:如何在特定時區中創建DateTime的新實例?

var tz = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time"); 
var date = new DateTime(2017, 1, 1, 0, 0, 0, DateTimeKind.Unspecified); 
Console.WriteLine(TimeZoneInfo.ConvertTime(date, tz)); 

我總是得到2016年12月31日晚上7:00:00點不管什麼DateTimeKind我定義(UTC,本地或未指定)。

如何在美國東部標準時間的0:00:00宣佈2017年1月1日的新日期時間?

+1

有很多方法,其中之一使用['TimeZoneInfo.BaseUtcOffset'](https://msdn.microsoft.com/en-us/library/system.timezoneinfo.baseutcoffset(v = vs.110).aspx ),還有['TimeZoneInfo.GetUtcOffset(DateTime)'](https://msdn.microsoft.com/en-us/library/bb396378(v = vs.110).aspx)和['TimeZoneInfo.GetUtcOffset(的DateTimeOffset)'](https://msdn.microsoft.com/en-us/library/bb459779(v = vs.110)的.aspx)。 –

+0

你能解釋一下你的預期產出嗎?您是否想將* DateTime *從*特定時區轉換爲當地時間? –

+0

@FedericoDipuma不,我想爲特定時區定義新的特定日期時間。例如,我想在2017年1月1日美國東部標準時間的日期時間實例。我不想依賴本地服務器時間,因爲服務器可能不在我的客戶端。所以我爲每個客戶端保存了TimeZoneInfo,我想基於此實例化時間。 – Marko

回答

1

可以使用的TimeZoneInfo來檢索您的區域

你可以找到timezones這裏

var zn = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 

來表達你使用的是本地東部標準時間使用DateTimeOffset結構,而不是日期時間

DateTimeOffset dateTimeOffset = new DateTimeOffset(new DateTime(2017, 1, 1, 0, 0, 0, DateTimeKind.Unspecified), zn.BaseUtcOffset); 

爲什麼DateTimeOffset

DateTimeOffset is a representation of instantaneous time (also known as absolute time).

+0

我需要使用TimeZoneInfo實例,因爲這對我來說是可用的,你能告訴我TimeSpan如何映射到TimeZoneInfo?你只需手工編碼-5倍的時差。 – Marko

+0

@Marko你的意思,因爲這對我來說意味着要動態地檢索該區域 –

+0

這對我來說是正確的答案,因爲它通過dateTimeOffset爲我提供了DateTime實例。日期時間,它也給我通過dateTimeOffset.Offset -5的偏移量。 – Marko

0

您可以根據您使用它來指定要創建DateTime對象是什麼時區使用timezoneID。

TimeZoneInfo tzone= TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard 
Time"); 
DateTime dt = DateTime.Now(); 

稍後,您只需將日期時間轉換爲您所需的時區即可。

var datetime2 = TimeZoneInfo.ConvertTimeFromUtc(dt , tzone); 

這是鏈接,你可以找到所有的時區ID。 TimeZoneIDs

謝謝,希望這可以幫助你。

相關問題