Я хочу показать время по Гринвичу с (1800 + 0100) - PullRequest
2 голосов
/ 02 февраля 2011

У меня есть поле в таблице с типом данных varchar, которое содержит время как 1800 + 0100, как я могу показать его в 19:00 по Гринвичу? Есть ли какой-нибудь метод C #, который принимает время как 1800 + 0100 и конвертирует в 19:00?

Заранее спасибо. Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

5 голосов
/ 02 февраля 2011

Если ваше время действительно в формате ISO-8601 , то вы можете сделать это:

DateTime dt = DateTime.ParseExact("1800+0100", "HHmmzzz", null,
                                  DateTimeStyles.AdjustToUniversal);
Console.WriteLine(dt.TimeOfDay);  // 17:00:00

Но обратите внимание, что это (правильно) выводит "17:00:00 ", а не " 19:00:00 ".

Если ваша строка не в формате ISO-8601 - и " 1800 + 0100 " действительно предназначен для представления 19:00 по Гринвичу - тогда вам нужно будет проанализировать строку вручную или, возможно, предварительно обработать ее перед передачей в ParseExact.Возможно что-то вроде этого:

string s = "1800+0100";

string temp = s.Substring(0, 4) + ((s[4] == '+') ? '-' : '+') + s.Substring(5);
DateTime dt = DateTime.ParseExact(temp, "HHmmzzz", null,
                                  DateTimeStyles.AdjustToUniversal);
Console.WriteLine(dt.TimeOfDay);  // 19:00:00
0 голосов
/ 02 февраля 2011

Остерегайтесь, хотя Великобритания использует GMT (UniversalTime) только зимой, а летом - летом.

0 голосов
/ 02 февраля 2011

Для этого вы можете использовать DateTimeOffset .Вы начинаете с построения экземпляра по времени и смещению, а затем просто извлекаете свойство UtcDateTime .

0 голосов
/ 02 февраля 2011

Класс DateTime поддерживает Add методы для DateTime объектов.Вы можете конвертировать один раз в другой, добавив любую единицу времени по вашему желанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...