2017-01-21 90 views
0

我學習C#的時區功能是如何工作的,並很努力就如何將時間轉換爲指定的時區。例如,讓我們按照下面的過程在TimeZone中傳遞時間 - 我如何將時間轉換爲在TimeZone中傳遞的時間?轉換時間到特定的時區

string proceduredatetime = "01/11/2017 10:17:34 AM" 
string tz = "P"; 
string convertedDT; 

convertedDT = ConvertToLocalTime(proceduredatetime, tz); 
Console.WriteLine("Procedure Date Time: " + proceduredatetime); 
Console.WriteLine("Timezone: " + tz); 
Console.WriteLine("Converted Date Time: " convertedDT); 

public static string ConvertToLocalTime(string proceduredatetime, string tz) 
{ 
String lastscantimelocalformat; 
string localtz; 

switch (tz) 
{ 
    case "C": 
     localtz = "Central Standard Time"; 
     break; 
    case "E": 
     localtz = "Eastern Standard Time"; 
     break; 
    case "M": 
     localtz = "Mountain Standard Time"; 
     break; 
    case "P": 
     localtz = "Pacific Standard Time"; 
     break; 
    default: 
     Console.WriteLine("Invalid tz."); 
     break; 
} 

if (localtz != null) 
{ 
    tzInfo ltz = tzInfo.FindSystemtzById(localtz); 
    //Lost on this step 

} 
} 
+0

什麼時區是「01/11/2017 10:17:34 AM」in?我可以看到這個問題的三個合理答案:1.電腦的本地時區。 2. UTC。 3.無論它在調用ConvertToLocalTime時與它配對。 –

+0

那個時間在本地服務器時間。我想將它轉換爲tz中的值。這有助於澄清? –

+0

如果此代碼在服務器上運行,是的。謝謝。 –

回答

1

如果您需要知道什麼時區proceduredatetime是。我建議讓UTC開始。如果proceduredatetime不是UTC,那麼我會將它轉換爲UTC。

你可以把proceduredatetime成DateTime對象是這樣的:

DateTime myDate = DateTime.ParseExact(proceduredatetime); 

,如果你正在尋找當前使用時間:

DateTime myDate = DateTime.UtcNow; 

然後,

如果myDate是UTC:

DateTime convertedDateTime = TimeZoneInfo.ConvertTimeUtc(myDate, TimeZoneInfo.FindSystemTimeZoneById(localtz)); 

如果它不是UTC,那麼你可以嘗試TimeZoneInfo.ConvertTime代替:

DateTime convertedDateTime = TimeZoneInfo.ConvertTime(myDate, TimeZoneInfo.FindSystemTimeZoneById("SOURCE TIME ZONE"), TimeZoneInfo.FindSystemTimeZoneById(localtz)); 

convertedDateTime應該轉換爲指定的時區中的日期時間。然後,您可以執行.ToString("yyyy-MM-dd")或任何您希望將其恢復爲字符串的格式。

+0

只需使用DateTimeOffset。 –

相關問題