2017-02-02 9 views
1

как преобразовать строку datetime в формат времени utc в GMT.конвертировать строку datetime в Utc

var x = "02/01/2017 10:00"; 
var z = DateTime.ParseExact(x, "ddd, dd MMM yyyy HH:mm:ss 'GMT'", CultureInfo.InvariantCulture); 
+1

Непонятно, что вы просите. Пожалуйста, укажите, что вы ожидаете в качестве вывода – NineBerry

ответ

3

На самом деле, что вы попробовали это не так, что вы можете сделать, это, получить эквивалент значения DateTime к данной дате, а затем преобразовать их в то время UTC, попробовать что-то вроде следующего:

string inputDateStr = "02/01/2017 10:00"; 
DateTime inputDate; 
if (DateTime.TryParseExact(inputDateStr, "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out inputDate)) 
{ 
    Console.WriteLine("Date time Now : {0} ", inputDate); 
    Console.WriteLine("Date time UTC : {0} ", inputDate.ToUniversalTime().ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'"));     
} 

Working Example

+0

Привет. Спасибо за рабочий пример. как я могу получить inputDate в datetime, а не в строке. – user3399326

+0

, если вход находится в DateTime, затем используйте 'inputDate.ToUniversalTime(). ToString (" ddd, dd MMM yyyy HH: mm: ss 'GMT' ")' только нет необходимости в преобразовании –

+0

Мне нужен формат вводаDateTime в формате datetime. поэтому я сделал inputDate.ToUniversalTime(). ToString ("ddd, dd MMM yyyy HH: mm: ss 'GMT'"). ToDateTime(), чтобы преобразовать в datetime. – user3399326

1

Я не уверен, что вы хотели сделать. Но, Universal Time, Zulu время и UTC эффективно современные названия среднего времени по Гринвичу (GMT). Таким образом, оба момента будут одинаковыми. Вы можете использовать метод DateTime.ToUniversalTime() или DateTime.UtcNow, чтобы получить время UTC.

0

Непонятно, что вы просите ... UTC - это не формат, это часовой пояс, эквивалентный GMT (ну, на самом деле это не совсем верно, но для целей этого вопроса он должен

Что такое poin t во времени ваша строка представляет? Это UTC? Или это местное время в Москве? У вас должен быть ответ на этот вопрос, потому что они совершенно разные времена.

Если строка представляет время UTC, то вы можете сделать что-то вроде этого:

// первый разобрать его на объект DateTime. Обратите внимание, что строка формата соответствует строкам, которые у вас есть - в вашем коде они были совершенно разными.

var dateTimeWithUnspecifiedKind = DateTime.ParseExact(x, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture); 

Так как у вас есть объект datetime. У него есть свойство «Вид» Unspecified. Таким образом, он не хранит никакой информации, чтобы указать, что она должна быть UTC, а не Москва или Нью-Йорк.

// поэтому мы делаем это ...

var dateTimeAsUtc = DateTime.SpecifyKind(dateTimeWithUnspecifiedKind, DateTimeKind.Utc); 

Это означает, что «держать число же, но обратите внимание, что даты и времени должна быть интерпретирована как UTC DateTime».

Затем, если вы хотите, чтобы преобразовать его обратно в строку, вы можете сделать что-то вроде:

var s = dateTimeAsUtc.ToString("O"); 

который даст вам хорошее представление:

2017-01-02T10:00:00.0000000Z 

Вам повезло, вы заинтересован в UTC. Класс datetime может использовать только UTC, «local» (что бы это ни было) или «Unspecified». Это не очень полезно для такого рода вещей. DateTimeOffset немного лучше - это в основном DateTime, но он также сохраняет разницу между UTC и смещением, которое действует в то время.

Это может быть все, что вам нужно. Если вам когда-нибудь понадобится реальная ясность вокруг этого материала, взгляните на время Noda - альтернативный набор классов даты и времени для .NET.

+0

Пожалуйста, отформатируйте разделы кода, используя кнопку '{}', чтобы ваша запись была более читаемой. – codeforester

+0

Извините, это мой первый пост - я буду читать форматирование до следующего раза! –

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