我在NodaTime中寻找某种类型的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;我想我在想我是不是忽略了一个更好的方法。
发布于 2017-06-13 20:08:50
更新:这将出现在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) --它不像“添加”偏移量。
https://stackoverflow.com/questions/44514504
复制相似问题