как получить время UTC прошлой даты, используя сервер asp.net и С# или sql

Можете ли вы помочь мне получить время UTC для заданной даты (которая может быть либо в прошлом, либо в текущем времени). Допустим, пользователь вводит дату в формате 12-AUG-2013 17:10 PHT. Можно ли получить время UTC этой даты? Я использую asp.net и С# 3.5 и sql server 2008 для своего проекта. Пожалуйста, предложите мне способы реализации этой опции. Пожалуйста, дайте нам знать для получения дополнительной информации относительно моего запроса. Спасибо

PHT не является частью входной строки, но я добавляю его, чтобы отобразить часовой пояс Phillines. Но я получаю эти сокращения с экрана администратора, где хранятся страна, разница во времени с UTC/GMT и сокращения часового пояса.

Я бы подробно рассказал о своем требовании. Пользователь вводит дату своего местного часового пояса. Эта дата может быть датой в прошлом или текущем. Например, пользователь вводит дату 12-AUG-2013 17:10, которая является датой и временем на Филиппинах (скажем). Я хочу, чтобы эта дата была преобразована в дату и время UTC/GMT. Как я это делаю, я прошу администратора хранить разницу во времени для каждой страны. когда пользователь вводит дату и на основе выбранной страны, я определяю ее как дату и время в Филлипнесе, если пользователь выбрал страну Филиппины. Затем я добавляю или вычитаю эту разницу во времени, чтобы получить дату UTC/GMT. Меня беспокоит то, что если пользователь вводит дату и время прошлого времени, то как мы можем получить время UTC этой даты, потому что мы можем получить только текущее время UTC. Надеюсь, я смог дать вам достаточно подробностей. Я знаю код и могу гуглить и все такое, но для этого мне нужен хороший подход. Мне просто нужна концепция, чтобы сделать это.


person Uneverno    schedule 27.08.2013    source источник
comment
Вы уже пробовали что-нибудь? Вы заглядывали в DateTime.Parse и TimeZoneInfo классы? Вы читали вики тега часового пояса? Вы действительно хотите, чтобы он понял, что PHT - это часовой пояс? Это часть входной строки? Если да, нужно ли поддерживать и другие сокращения?   -  person Matt Johnson-Pint    schedule 27.08.2013
comment
Пожалуйста, проверьте мои правки в вопросе. Я сообщил подробности. надеюсь, что это может помочь вам помочь мне :)   -  person Uneverno    schedule 28.08.2013


Ответы (2)


... я получаю эти сокращения с экрана администратора, где хранятся страна, разница во времени с UTC/GMT и сокращения часового пояса...

Если вы пытаетесь поддержать большую часть мира, этого будет недостаточно. Часовой пояс — это не просто смещение от UTC. В большинстве случаев вы не можете просто запросить у пользователя смещение. Пожалуйста, прочитайте вики тега часового пояса. Вам необходимо знать часовой пояс. В данном случае это либо "Singapore Standard Time" для базы данных часовых поясов Windows, либо "Asia/Manila" для базы данных IANA.

Например, пользователь вводит дату 12-AUG-2013 17:10, которая является филиппинской датой и временем (допустим). Я хочу, чтобы эта дата была преобразована в дату и время UTC/GMT.

Вот как вы конвертируете с помощью C# для часового пояса Windows:

DateTime local = new DateTime(2013, 8, 12, 17, 10, 0);
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Singapore Standard Time");
DateTime utc = TimeZoneInfo.ConvertTimeToUtc(local, tz);

А вот как вы можете преобразовать его с помощью базы данных IANA через библиотеку Noda Time:

LocalDateTime local = new LocalDateTime(2013, 8, 12, 17, 10, 0);
DateTimeZone tz = DateTimeZoneProviders.Tzdb["Asia/Manila"];
ZonedDateTime zdt = local.InZoneLeniently(tz);
Instant utcinstant = zdt.ToInstant(); // for a NodaTime instant
DateTime utcdt = zdt.ToDateTimeUtc(); // for a regular UTC DateTime

Я пропустил тот факт, что вы начинаете со строки, поскольку ваш вопрос больше сосредоточен на проблеме UTC и часового пояса. Если вам нужна помощь, посмотрите DateTime.Parse. или DateTime.ParseExact. Если вы используете Noda Time, просмотрите их документацию по анализу текста.

person Matt Johnson-Pint    schedule 28.08.2013

Попробуйте как

 DateTime utcDateTime = DateTimeVariable.ToUniversalTime();
person Amit    schedule 27.08.2013
comment
что, если пользователь укажет дату прошлого года и как получить точное время UTC этой даты. - person Uneverno; 27.08.2013
comment
дата передачи в DateTimeVariable - person Amit; 27.08.2013
comment
@Uneverno msdn.microsoft.com/en-us/library/bb495915.aspx проверить эту ссылку - person Nitin Varpe; 27.08.2013
comment
можете ли вы привести пример, пожалуйста? - person Uneverno; 27.08.2013