Я хочу что-то вроде этого:
[Kind=DateTimeKind.Utc]
public DateTime CreatedOn { get; set; }
Можно ли декларативно установить Kind таким образом? Что такое правильный синтаксис? У меня есть классы-заглушки для использования в моем веб-сервисе JSON WCF, и когда даты другого конца (Java-клиента) получают - все они любят:
123456000-0500
Где "-0500" - это мой часовой пояс, и если я выберу только левую часть, это будет неправильная дата UTC (я должен вычесть 5 часов). Я бы лучше исправил это на сервере.
РЕДАКТИРОВАТЬ :
Я сохраняю все даты в базе данных (SQL Server) как UTC. Я никогда не имею дело с местными датами, за исключением случаев, когда нужно их отображать.
У меня есть простой класс, который я передаю в качестве ответа в моей службе WCF - JSON. Когда я заполняю этот класс - я запрашиваю базу данных с EF и присваиваю значения этому классу.
На клиенте, который является телефоном Android с Java - я использую библиотеку Gson для десериализации. Gson не может десериализовать формат WCF, поэтому я уже написал свой уродливый десериализатор так:
открытый класс GsonDateDeserializer реализует JsonDeserializer
{
публичная дата десериализации (JsonElement json, тип typeOfT, контекст JsonDeserializationContext) выдает исключение JsonParseException
{
String s = json.getAsString ();
s = s.replace ("/ Date (", "");
s = s.replace (") /", "");
//if there us no data passed in - that means NULL
if (s.equals("")) return null;
//If we got timezone info with this date - cut it off
if (s.length() > 5 && (s.indexOf("-") == s.length()-5 || s.indexOf("+") == s.length()-5))
{
s = s.substring(0, s.length()-5);
}
Long l = Long.valueOf(s);
return new Date(l);
}
}
Я думал, что WCF передает «-0500» только для информации, поэтому клиент знает, в какой часовой пояс его следует преобразовать. Но нет. Проходит левый номер с добавлением 5 часов. Итак, я не хочу, чтобы сервер был «умным», и просто хочу, чтобы все даты проходили как «-0000»