2013-04-11 3 views
0

У меня возникла проблема с тем, что строка DateTime не распознается. В нашей программе лицензирования вы создаете ключ, у которого с ним связано истечение срока DateTime. Однако некоторые из наших клиентов в другой части мира не могут применить этот ключ, а ошибка, которая возвращается, «String не была признана допустимым DateTime».Проблема с недопустимой строкой DateTime

Я посмотрел на ключ, который я их отправил, и после его дешифрования DateTime выглядит хорошо для меня. Есть ли несоответствие тому, как DateTimes отформатированы в разных частях мира, что мне нужно учитывать? (Прямо сейчас я исхожу из предположения, что .NET будет просто «разобраться», что, я думаю, может быть и не так). И если да, то как я буду форматировать нашу DateTime, чтобы она работала в любой части мира?

EDIT Вот строка DateTime: "10/16/2122 4:36:17 PM"

+0

Что ваш формат даты? – musefan

+0

Как выглядит ваш код? Как выглядит строка, представляющая дату? Как генерируется ключ? –

+0

Некоторые культуры: dd/mm/yyyy http://msdn.microsoft.com/en-us/library/1k1skd40(v=VS.80).aspx – Paparazzi

ответ

2

Я думаю, что ключ генерируется так:

string key = date.ToString(); 

Это даст другой результат для другой страны.
Сделать ключ уникальным образом сгенерированный, давая формат починки:

string key = date.ToString("yyyyMMdd"); 

Затем вы можете разобрать его обратно на дату в всей стране:

var date = DateTime.ParseExact(key, "yyyyMMdd", CultureInfo.InvariantCulture); 

Далее чтение here.
And here you can find all the date format you have ever dream of.

+0

Да, это то, как я конвертирую DateTime в строку (верхнюю). Я собираюсь пойти на это и посмотреть, как это работает, используя InvariantCulture. Я всегда полагал, что DateTime.ToString() был совместим в разных странах, никогда не смотрел API-интерфейс DateTime иначе, чем для справки по форматированию. –

3

Спонтанно Я хотел бы попробовать использовать метод .ToString(), чтобы применить пользовательский формат.

Пример:

string date = DateTime.Now.ToString("yyyy-MM-dd"); // International standard 

Вы можете следить за MSDN Custom Date and Time Format помощь форматировать его так, как вам нужно.

+0

Согласитесь, мой опыт - это все культуры. – Paparazzi

+1

После дальнейших исследований, это то, как CultureInfo.InvariantCulture форматирует строку (и с фактическим временем, которое кажется UTC). –

2

Это, вероятно, проблема культуры. Используйте InvariantCulture, чтобы убедиться, что вы всегда используете один и тот же формат

string datestring = DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantCulture) 

DateTime date = DateTime.Parse(datestring, System.Globalization.CultureInfo.InvariantCulture); 
+0

Приятный и чистый! – einord