2017-01-20 4 views
-1

У меня есть строка DateTime, и я знаю, в какое времяZone она отформатирована, но без какой-либо информацииZone в этой строке.Преобразование строки DateTime в определенный часовой пояс DateTime в C#

пример: 2017-01-19 23:53:57

Теперь эта строка будет преобразована в сервере, который находится в другом часовом поясе, и я не могу изменить часовой пояс сервера.

Если я использую DateTime.Parse("2017-01-19 23:53:57"), я получаю DateTime времени сервера сервера.

Это мое веб-приложение, и сервер может находиться в разных часовых поясах.

Я не хочу конвертировать время Бангладеш в UTC. Я просто хочу преобразовать строку DateTime, которая является форматом часового пояса Бангладеш, в DateTime объект также в формате часового пояса Бангладеш.

+1

Надежда [Преобразование раз между часовыми поясами] (https://msdn.microsoft.com/en-us/library/bb397769 (v = vs.110) .aspx) может помочь вам –

+0

Если вы знаете, что ваш 'DateTime' будет использоваться в нескольких локалях, вы должны использовать' DateTime.UtcNow', когда это возможно, и выполнять преобразование в локальное время только на компьютере конечного пользователя, когда это необходимо. – Abion47

+1

Еще лучше, используйте DateTimeInfo, поэтому вам не нужно конвертировать между смещениями вообще –

ответ

-2

Вы можете конвертировать 2017-01-19 23:53:57 формат строки в datetime через метод ниже.

DateTime DateConverter(string date) 
    { 
     string[] dateAndTimes= date.Split(' '); 
     string[] dateParts = dateAndTimes[0].Split('-'); 
     string convertableString = dateParts[2] + "/" + dateParts[1] + "/" + dateParts[0] + " " + dateAndTimes[1]; 
     return Convert.ToDateTime(convertableString); 
    } 
+0

Во-первых, этот формат может быть проанализирован непосредственно с помощью 'DateTime.Parse'. Кроме того, 'DateTime.ParseExact' может обрабатывать любой формат. Во-вторых, речь идет не о разборе. Речь идет о переходе между часовыми поясами. –

2

Это должно делать вашу работу, так как вы точно знаете, что часовой пояс источника находится в bagladesh.

var time = DateTime.Parse("2017-01-19 23:53:57"); 
var clientZone = TimeZoneInfo.FindSystemTimeZoneById("Bangladesh Standard Time"); 
var utcTime = TimeZoneInfo.ConvertTimeToUtc(time, clientZone); 
+0

Вау, он работает, я тестировал его на одном из моих серверов. Но я не понимал, почему это работает. Потому что в этой строке 'var time = DateTime.Parse (" 2017-01-19 23:53:57 "); ' , время должно быть преобразовано с настройкой TimeZone машины. Затем он пытается преобразовать формат «Бангладеш стандартного времени», который должен быть неправильным, я думаю. – Moshii

+0

var time = DateTime.Parse ("2017-01-19 23:53:57"); Ваш сервер анализирует его местный часовой пояс, но Он знает это :). –

+0

@Moshii - это конвертирует * из * времени Бангладеш, в UTC. Это то, что вы хотели? В вашем вопросе вы не сказали, было ли это от * чего-то * Бангладеш, или от Бангладеш до * чего-то *, и вы не указали, что это * что-то было. –

Смежные вопросы