我知道有DateTimeZone.AtStartOfDay方法,但是有类似的方法来开始一年/月吗?我知道最简单的方法是将这些硬编码到“X的第一天和30秒”(我做了LocalDateTime start = LocalDateTime.FromDateTime(new DateTime(2014, 1, 1, 0, 0, 1, DateTimeKind.Utc));),但我认为这远不是最佳实践
发布于 2015-08-11 14:25:24
您当然不需要通过DateTime --但是要在特定的时区获得一年的开始,我只需使用:
var startOfYear = zone.AtStartOfDay(new LocalDate(year, 1, 1));请注意,这将有助于获得ZonedDateTime和年初之间的持续时间。在一段时间内(例如5个月、2天、3小时),您只需要使用LocalDateTime,它不会考虑时区。(在时区面前,周期运算变得很奇怪.)
要获得LocalDateTime,只需使用:
var startOfYear = new LocalDate(year, 1, 1).AtMidnight();..。尽管不能保证该日期/时间发生在任何特定的时区(或仅发生一次)。
发布于 2019-06-19 06:29:51
使用日期调节器解决问题也是可能的。本月初的情况如下:
LocalDateTime now = new LocalDateTime(2014, 6, 27, 7, 14, 25);
LocalDateTime startOfMonth = now.With(DateAdjusters.StartOfMonth);
Console.WriteLine(startOfMonth); // 2014-06-01T07:14:25不过,今年年初没有本机调整器,但我们可以合并:
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 AMhttps://stackoverflow.com/questions/31935943
复制相似问题