c # сериализовал дату JSON в ruby

2

У меня есть приложение на С#, которое сериализует его DTO в JSON и отправляет их на провод, который будет обрабатываться Ruby. Теперь формат сериализованной даты выглядит так:

/Date(1250170550493+0100)/

Когда это попадает в приложение Ruby, мне нужно вернуть это строковое представление к дате/дате времени/времени (независимо от того, что находится в Ruby). Любые идеи, как я буду это делать?

Привет, Крис.

Теги:
serialization

4 ответа

3
Лучший ответ

Вы можете разобрать миллисекунды с эпохи, что-то вроде:

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), поэтому это отправная точка.

  • 1
    parse_date('/Date(1250170550493+0100)/') возвращает 41586-04-30 15:21:33 +0200
  • 0
    @narzero вы правы, в данном случае это миллисекунды с начала эпохи, а не секунды с начала эпохи. Закрепление.
3

Вы можете использовать Json.NET для сериализации своих DTO вместо встроенного сериализатора .NET JSON. Это дает вам гибкость в отношении того, как сериализовать даты (т.е. Как конструктор, формат ISO и т.д.).

  • 0
    +1, отличный вариант, если ваши требования позволяют вам изменить формат сериализации даты на что-то более подходящее Ruby
  • 0
    Кстати, мы постоянно используем Json.NET, отличная библиотека. Спасибо Джеймс!
2

.NET сериализуется в миллисекундах с эпохи, поэтому вам нужно разделить часть до часового пояса на 1000. Другие мудрые ваши даты будут тысячами лет.

0

Вы можете использовать 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню