首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在NodaTime中获得“年初/月”?

如何在NodaTime中获得“年初/月”?
EN

Stack Overflow用户
提问于 2015-08-11 07:42:06
回答 2查看 1.9K关注 0票数 3

我知道有DateTimeZone.AtStartOfDay方法,但是有类似的方法来开始一年/月吗?我知道最简单的方法是将这些硬编码到“X的第一天和30秒”(我做了LocalDateTime start = LocalDateTime.FromDateTime(new DateTime(2014, 1, 1, 0, 0, 1, DateTimeKind.Utc));),但我认为这远不是最佳实践

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-11 14:25:24

您当然不需要通过DateTime --但是要在特定的时区获得一年的开始,我只需使用:

代码语言:javascript
复制
var startOfYear = zone.AtStartOfDay(new LocalDate(year, 1, 1));

请注意,这将有助于获得ZonedDateTime和年初之间的持续时间。在一段时间内(例如5个月、2天、3小时),您只需要使用LocalDateTime,它不会考虑时区。(在时区面前,周期运算变得很奇怪.)

要获得LocalDateTime,只需使用:

代码语言:javascript
复制
var startOfYear = new LocalDate(year, 1, 1).AtMidnight();

..。尽管不能保证该日期/时间发生在任何特定的时区(或仅发生一次)。

票数 5
EN

Stack Overflow用户

发布于 2019-06-19 06:29:51

使用日期调节器解决问题也是可能的。本月初的情况如下:

代码语言:javascript
复制
LocalDateTime now = new LocalDateTime(2014, 6, 27, 7, 14, 25);
LocalDateTime startOfMonth = now.With(DateAdjusters.StartOfMonth);
Console.WriteLine(startOfMonth); // 2014-06-01T07:14:25

不过,今年年初没有本机调整器,但我们可以合并:

代码语言:javascript
复制
LocalDateTime now = new LocalDateTime(2014, 6, 27, 7, 14, 25);
LocalDateTime startOfMonth = now.With(DateAdjusters.Month(1)).With(DateAdjusters.StartOfMonth);
Console.WriteLine(startOfMonth); // 1/1/14 7:14:25 AM
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31935943

复制
相关文章

相似问题

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