首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OffsetTime in NodaTime

OffsetTime in NodaTime
EN

Stack Overflow用户
提问于 2017-06-13 07:06:16
回答 1查看 617关注 0票数 5

我在NodaTime中寻找某种类型的NodaTime支持,但没有看到任何东西。我正在以"17:13:00+10:00“这样的格式接收数据。我将把它作为时间偏移,将其应用于给定的日期(用户控制的日期),以达到显示目的的本地时间。

我想出的最好的办法是:

代码语言:javascript
复制
// 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;

我想我在想我是不是忽略了一个更好的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-13 20:08:50

更新:这将出现在Noda Time 2.3中。

不,Noda Time里没有代表这个的东西。这是一种非常奇怪的价值,因为至少在许多时区,偏移量将在一年内发生变化。我明白,有时候我们需要用我们所拥有的去工作。

我可能会将它保留为两个字段:OffsetLocalTime。然后,一旦有了OffsetDateTime,就可以构建LocalDate了。您可以像前面所做的那样通过OffsetDateTime获得这两个值,但我建议尽快将其拆分为两个值,以避免出现任何有用日期的提示。

如果您想保持现有的代码结构,那么至少可以使其简单得多:

代码语言:javascript
复制
// 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) --它不像“添加”偏移量。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44514504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档