OffsetTime в NodaTime
Я ищу какой-то OffsetTime
Поддерживаю в NodaTime, но ничего не вижу. Я получаю данные в таком формате, как "17:13:00+10:00". Я должен рассматривать это как временной сдвиг, применяя его к определенной дате (которую контролирует пользователь), чтобы прибыть в местное время для целей отображения.
Лучшее, что я смог придумать, это:
// the date for this OffsetDateTime will be 1/1/2000
var parsed = OffsetDateTimePattern.CreateWithInvariantCulture("HH:mm:sso<G>").Parse(input).Value;
var desiredLocalDate = new LocalDate(2017, 06, 13);
var adjusted = new OffsetDateTime(
new LocalDateTime(desiredLocalDate.Year, desiredLocalDate.Month, desiredLocalDate.Day, parsed.Hour, parsed.Minute, parsed.Second, parsed.Millisecond),
parsed.Offset);
var localTime = adjusted.LocalDateTime;
Я думаю, мне интересно, пропускаю ли я лучший способ сделать это.
1 ответ
Обновление: теперь это будет в Noda Time 2.3.
Нет, в Noda Time нет ничего, что представляло бы это. Это довольно странное значение, так как, по крайней мере, во многих часовых поясах смещение будет меняться в течение года. Я понимаю, что иногда нам нужно работать с тем, что у нас есть.
Я бы, вероятно, оставил его как два поля: Offset
и LocalTime
, Затем вы можете построить OffsetDateTime
когда у вас есть LocalDate
, Вы можете получить эти два через OffsetDateTime
как вы уже делаете, но я бы посоветовал разбить его на два значения как можно скорее, чтобы избежать намека на то, что там есть полезная дата.
Если вы хотите сохранить существующую структуру кода, вы можете, по крайней мере, сделать ее намного проще:
// The date for this OffsetDateTime will be 1/1/2000
// Note: the pattern can be created once and reused; it's thread-safe.
var parsed = OffsetDateTimePattern.CreateWithInvariantCulture("HH:mm:sso<G>")
.Parse(input).Value;
var desiredLocalDate = new LocalDate(2017, 06, 13);
var adjusted = desiredLocalDate.At(parsed.TimeOfDay).WithOffset(parsed.Offset);
var localTime = adjusted.LocalDateTime;
Обратите внимание, что localTime
здесь всегда будет эквивалентно desiredLocalDate.At(parsed.TimeOfDay)
- это не так, как смещение "добавлено" к нему.