У меня есть приложение на С#, которое сериализует его DTO в JSON и отправляет их на провод, который будет обрабатываться Ruby. Теперь формат сериализованной даты выглядит так:
/Date(1250170550493+0100)/
Когда это попадает в приложение Ruby, мне нужно вернуть это строковое представление к дате/дате времени/времени (независимо от того, что находится в Ruby). Любые идеи, как я буду это делать?
Привет, Крис.
Вы можете разобрать миллисекунды с эпохи, что-то вроде:
def parse_date(datestring)
seconds_since_epoch = datestring.scan(/[0-9]+/)[0].to_i / 1000.0
return Time.at(seconds_since_epoch)
end
parse_date('/Date(1250170550493+0100)/')
Вам все равно нужно обрабатывать информацию о часовом поясе (часть +0100
), поэтому это отправная точка.
Вы можете использовать Json.NET для сериализации своих DTO вместо встроенного сериализатора .NET JSON. Это дает вам гибкость в отношении того, как сериализовать даты (т.е. Как конструктор, формат ISO и т.д.).
.NET сериализуется в миллисекундах с эпохи, поэтому вам нужно разделить часть до часового пояса на 1000. Другие мудрые ваши даты будут тысячами лет.
Вы можете использовать Time.strptime
для синтаксического анализа этого объекта Time
с правильным часовым поясом:
Time.strptime(string, "/Date(%Q%z)/")
Например:
string = "/Date(1250170550493+0100)/"
Time.strptime(string, "/Date(%Q%z)/")
#=> 2009-08-13 14:35:50 +0100
parse_date('/Date(1250170550493+0100)/')
возвращает41586-04-30 15:21:33 +0200