2016-04-07 1 views
-1

Я хочу, чтобы преобразовать ниже формат даты и времени в SQL дату и время Чт Апр 07 2016 06:30:00 GMT + 0530 (Индия стандартное время) any у меня есть идея. Спасибо.Как превратить Индию Стандартное время на SQL дату и время в C#

+0

Какая строка ввода? Действительно ли он содержит как «GMT + 0530 (индийское стандартное время)»? Вы пытались выполнить синтаксический анализ на DateTimeOffset перед отправкой на SQL Server? Каков тип столбца? DateTimeOffset (хорошо) или просто DateTime (забудьте timezones?) –

ответ

-1

Если вход является строкой, то вам нужно будет начать разбор даты для конкретной культуры:

DateTime dt = DateTime.ParseExact(inputString, System.Globalization.CultureInfo("<your_culture>")); 

где <your_culture> является одним из нескольких имен культур для вашей страны (см http://www.csharp-examples.net/culture-names/)

, то вы можете получить дату обратно в виде строки SQL-совместимой с простыми кавычками включено:

string sqlDate = dt.ToString("'yyyy-MM-dd HH:mm:ss'"); 
+0

DateTime не поддерживает часовые пояса или смещения. Правильный тип для использования - DateTimeOffset –

+0

Конечно, это будет преобразовывать только форматы. Исходя из этого вопроса, я не сделал вывод о том, что ему также требуется преобразование часового пояса. –

+0

Хранение или передача дат в виде текста в базе данных * не * хорошая идея. Намного лучше и проще использовать параметры даты и избегать конверсий и ошибок форматирования. Например, формат в этом ответе * не * "SQL-совместимый". Он может выглядеть как формат ISO 8601, но отсутствует разделитель 'T'. Он будет проанализирован с использованием языка сервера –

1

поскольку ваша строка имеет UTC Offset значение, я бы разобрал его до DateTimeOffset вместо DateTime с него может провести смещение части.

Но ни DateTime ни DateTimeOffset хранит информацию о часовом поясе, вы должны использовать GMT и (India Standard Time) частей в виде строки буквальным разделителя.

var s = "Thu Apr 07 2016 06:30:00 GMT+0530 (India Standard Time)"; 
var dto = DateTimeOffset.ParseExact(s, "ddd MMM dd yyyy HH:mm:ss 'GMT'zzz '(India Standard Time)'", 
            CultureInfo.InvariantCulture); 

Теперь у вас есть DateTimeOffset в {07.04.2016 06:30:00 +05:30}.

enter image description here

И я хотел бы вставить этот dto как datetimeoffset типизированных столбца в SQL Server (с parameterized query, конечно), так как он сохраняет смещение части, а также.

+---------------------------+ 
| Time zone offset range | 
+---------------------------+ 
| -14:00 through +14:00 | 
+---------------------------+