Я решил, что буду использовать 8601 datetime для всех дат, которые я возвращаю из своего приложения. Внезапно, в одном конкретном процессе, getdate () не возвращает дату и время с буквой T в середине. Следует также упомянуть, что я преобразую набор, содержащий дату и время, в XML , используя FOR XML PATH. Обычно, когда я конвертирую таблицу с датой и временем в xml, я получаю 8601 отформатированные даты. Но в одном случае я не.
select (cast(getdate() as datetime)) -- returns 2010-01-25 10:13:46.033
Так что я прямо конвертировал это так:
select convert(datetime, getdate(), 126) -- returns 2010-01-25 10:14:35.923
Но если я брошу его на nvarchar, я получу T !!
SELECT CONVERT(NVARCHAR(30), GETDATE(), 126) -- returns 2010-01-25T10:15:29.633
Что еще страннее для меня, это то, что если я выберу несколько версий этого с объединением, версия T исчезнет. Но при выборе без объединения версия T (последняя) остается.
-- returns 4 rows of 2010-01-25 10:15:57.333
select getdate() union all
select (cast(getdate() as datetime)) union all
select convert(datetime, getdate(), 126) union all
SELECT CONVERT(NVARCHAR(30), GETDATE(), 126)
Я действительно понятия не имею, что могло вызвать это. Я думал, что 8601 даты были независимы от локали, поэтому я не думаю, что это что-то подобное.
Ссылка ("гггг-мм-ддтч: ми: сс.ммм" для 126): http://msdn.microsoft.com/en-us/library/ms187928.aspx