Date 如何将月份转换为其他持续时间度量类型?
对于某些与持续时间相关的计算,我需要将以“月”为单位测量的值转换为其他格式,例如年、天或小时 例如,用天来衡量一个月的正确方法是什么?现在是30天吗?还是Date 如何将月份转换为其他持续时间度量类型?,date,datetime,calendar,duration,date-arithmetic,Date,Datetime,Calendar,Duration,Date Arithmetic,对于某些与持续时间相关的计算,我需要将以“月”为单位测量的值转换为其他格式,例如年、天或小时 例如,用天来衡量一个月的正确方法是什么?现在是30天吗?还是30.4375天(365.25/12)在哪些情况下,哪种格式有用 如果您有任何关于此类转换的临时/业务用例的信息,也会很有帮助。不幸的是,您的问题实际上没有一个普遍有效的答案 如果这是用于商业用途,首先检查是否有任何现有的相关标准或商业实践定义了“月”在您的商业环境中的含义。如果是的话,你应该尽可能地遵循这个定义,不管它看起来多么愚蠢或尴尬 对
30.4375
天<代码>(365.25/12)在哪些情况下,哪种格式有用
如果您有任何关于此类转换的临时/业务用例的信息,也会很有帮助。不幸的是,您的问题实际上没有一个普遍有效的答案 如果这是用于商业用途,首先检查是否有任何现有的相关标准或商业实践定义了“月”在您的商业环境中的含义。如果是的话,你应该尽可能地遵循这个定义,不管它看起来多么愚蠢或尴尬 对于临时使用,最简单的解决方案可能是选择任何广泛使用的日期操纵库并执行它所做的任何操作。默认行为可能并不完美,但它可能至少接近于一个相当合理的折衷方案,即这样一个库的用户可能有许多相互矛盾的期望 好吧,但如果你坚持推出自己的解决方案呢?在这种情况下,您应该做的第一个选择是如何表示日期/时间值。至少有两种常见的选择:
00:00:00.0
,则任何导致时间部分减少一秒的因素,例如,移动到更晚的时区,或者减去一个不是整数天的模糊时间单位,将日期部分翻转到前一天。例如,使用此表示法,从2014年1月1日减去一年(=265.2425天)将得到2012年的日期(具体来说,2012年12月31日,17:56:32
)
您可以通过用中点表示不精确的日期/时间值来避免这些问题,例如,日期2014
被视为2014年6月2日12:00:00
的缩写。使用此表示法,您失去的是仅通过添加组件来构建日期时间的能力:使用此表示法,2014
+5个月
+3天
距离2014年5月3日不远
而且,当你认为你至少已经明确地整理出了简单的非模糊时间算法时,有人会告诉你- 模糊单位算法(概念上)很简单:要给一个日期加上一年,只需将年份分量增加一
- 可以自然地表示不精确的日期/时间值:对于纯日期值,一天中的时间组件可以不定义(=例如,对于未定义的组件,用负值表示,或者让每个日期时间值存储其精度)
- 您可以精确控制何时以及是否发生展期:在2014年的某个日期上加上一年将始终产生2015年的某个日期
- 您还可以支持浮动时间值,例如没有指定日期的时间或没有指定年份的日期。浮动时区也变得可以支持
- 实现日期算法变得更加复杂,因为您必须处理非平凡的进位/借位规则。(快!2014年5月3日之后10000000秒的日期是什么?)
- 你仍然会对月份的计算有歧义:1月31日后一个月的日期是什么?这是否取决于它是否是闰年
(1月31日+1个月)+1个月等于预期的3月31日
在某些方面,尽管这只是推迟了