У меня есть datetime (in utc), сохраненный в базе данных, и я также знаю смещение utc в следующем формате.convert utc time and offset to DateTime
-03:00:00
как преобразовать это DateTime
У меня есть datetime (in utc), сохраненный в базе данных, и я также знаю смещение utc в следующем формате.convert utc time and offset to DateTime
-03:00:00
как преобразовать это DateTime
Этот простейший способ применить «смещение» к DateTime
, что у вас уже есть, чтобы создать TimeSpan
структуру, которая держит ваше значение смещения, а затем просто " добавить "смещение в исходное значение DateTime
.
Например:
DateTime utcDateTime = DateTime.Parse("29 July 2010 14:13:45");
TimeSpan offSet = TimeSpan.Parse("-03:00:00");
DateTime newDateTime = utcDateTime + offSet;
Console.WriteLine(newDateTime);
Это приводит следующий вывод:
29/07/2010 11:13:45
, который является оригинальным времени (29 июля 2010 14:13:45) минус 3 часа (смещение - -03: 00: 00).
Обратите внимание, что этот метод просто выполняет простую арифметику с вашим значением DateTime
и не учитывает никаких часовых поясов.
Обратите внимание, что Parse терпит неудачу, когда у вас есть знак «+» в строке. Поэтому используйте знак «-» или вообще нет! http://msdn.microsoft.com/en-us/library/se73z7b9%28v=vs.110%29.aspx – Jowen
Как насчет летнего времени? –
@AnilPurswani Вы можете применить только переход на летнее время, если вы знаете конкретный часовой пояс, а не только «смещение часов». Класс TimeZoneInfo имеет свойство (SupportsDaylightSavingTime), чтобы указать, поддерживает ли определенный часовой пояс переход на летнее время. Различные часовые пояса могут иметь одинаковое смещение часов, но могут или не могут поддерживать летнее время. – CraigTP
Проблемы вы, вероятно, работаете в том, что большинство водителей DB при выборке из базы данных будут создавать DateTime
с DateTimeKind.Unspecified
, который не может преобразовать в UTC должным образом, даже при использовании ToUniversalTime
. Чтобы получить arround это, я использую метод расширения следующим образом:
public static DateTime ToSafeUniversalTime(this DateTime date) {
if(date != DateTime.MinValue && date != DateTime.MaxValue) {
switch(date.Kind) {
case DateTimeKind.Unspecified:
date = new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second, DateTimeKind.Utc);
break;
case DateTimeKind.Local:
date = date.ToUniversalTime();
break;
}
}
return date;
}
'12: 12: 12' не выглядит как смещение UTC для меня или поле' datetime'. Можете ли вы рассказать о значении каждой части? – Oded
http://stackoverflow.com/questions/2548235/convert-utc-datetime-to-another-time-zone это поможет вам –
@Oded это смещение utc. это диапазон от -12: 00: 00 до 13:00:00 – developer