NodaTime 中的 OffsetTime
OffsetTime in NodaTime
我正在 NodaTime 中寻找某种 OffsetTime
支持,但我没有看到任何东西。我正在接收格式为“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;
我想我想知道我是否忽略了更好的方法。
更新:现在将在 Noda Time 2.3 中。
不,野田时代没有任何东西可以代表这一点。这是一种非常奇怪的值,因为至少在许多时区,偏移量会在一年中发生变化。我明白有时候我们需要利用现有的资源。
我可能会将其保留为两个字段:Offset
和 LocalTime
。一旦你有了 LocalDate
,你就可以建立一个 OffsetDateTime
。您可以像您已经在做的那样通过 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)
- 它不像偏移量 "added" 那样。
我正在 NodaTime 中寻找某种 OffsetTime
支持,但我没有看到任何东西。我正在接收格式为“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;
我想我想知道我是否忽略了更好的方法。
更新:现在将在 Noda Time 2.3 中。
不,野田时代没有任何东西可以代表这一点。这是一种非常奇怪的值,因为至少在许多时区,偏移量会在一年中发生变化。我明白有时候我们需要利用现有的资源。
我可能会将其保留为两个字段:Offset
和 LocalTime
。一旦你有了 LocalDate
,你就可以建立一个 OffsetDateTime
。您可以像您已经在做的那样通过 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)
- 它不像偏移量 "added" 那样。