2017-01-21 3 views
0

Я изучаю работу функций CZ TimeZone и борюсь за то, как преобразовать время в назначенный TimeZone. Например, давайте рассмотрим нижеприведенную процедуру, где я передаю 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» в? Я могу видеть 3 разумных ответа на этот вопрос: 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 должны быть DateTime преобразованы в указанный часовой пояс. Затем вы можете сделать .ToString("yyyy-MM-dd") или любой другой формат, который вы хотите вернуть в строку.

+0

Просто используйте DateTimeOffset. –