繁体   English   中英

使用 java.time API 获取一个月天数的最佳方法是什么?

[英]What's the best way to get the number of days in a month using the java.time API?

我需要确定java.time.ZonedDateTime的月份部分所代表的月份中的天数。 我想出了三种似乎可行的方法。 鉴于:

ZonedDateTime date = _some date_;

选项1:

int daysInMonth = date.getMonth().length(date.getChronology().isLeapYear(date.getYear()));

选项 2:

int daysInMonth = date.getMonth().length(date.toLocalDate().isLeapYear());

选项 3:

int daysInMonth = YearMonth.from(date).lengthOfMonth();

我在检查此问题是否重复时发现了选项 3( 特定年份的特定月份的天数? )。 我错过了任何其他选择吗? 这些选项中的一个是否优于另一个? 这种优越感在什么情况下会体现出来?

如果我没看错的话,第一个似乎是唯一能够支持除 IsoChronology 之外的年表的。 这对于手头的用例并不重要,但我确实喜欢编写灵活、可重用的代码,并且我希望它不会在其他情况下失败。 我不是那些替代年表的专家,我不知道它们是否有闰年或其他任何可能导致一个月长度变化的东西。 哎呀,我什至不知道他们是否有几个月

编辑:选项 4,根据@Ole VV 的回答,如下:

int daysInMonth = date.toLocalDate().lengthOfMonth();
    int daysInMonth = date.toLocalDate().lengthOfMonth();

我理解你的困惑。 几种方法可以做到这一点,以上并不是唯一的好方法。 特别是我也很喜欢你的选项 3。 明确涉及isLeapYear()的选项不符合我的口味,我发现它们太低级,太手动。

这种优越感在什么情况下会体现出来?

可读性和没有惊喜是王道。 从那里你的判断至少和我一样好。 您可能比我更了解将维护您的代码的人。

您也可以退后一步,问问自己一个月内需要多少天数。 我之所以提到这一点,是因为一个典型的用途是计算 java.time 本身可以做得比你更好,例如将 24 天添加到日期,查找不同月份中两个日期之间的天数或找出日期的哪一天年份 某个日期是。 java.time 拥有所有这些以及更多的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM