当前位置: 首页 > 知识库问答 >
问题:

如果每个月有30天,则以年、月、日为单位计算差异

丁毅庵
2023-03-14

无法计算年、月、日两个日期之间的差异。问题是每个月有30天,每年有365天,没有例外。这里有很多话题,但我没有找到任何能解决我的问题或帮助我解决问题的。我发现的每一个主题都只是用普通的方法解决计算差分的问题,这很简单。我如何计算这种差异?

我使用的是Java 7(没有机会安装joda time)和groovy 2.4.0。

例子有:

date from    date to       y  m  d
2014-02-01 - 2015-02-01 => 1  0  1
2000-02-10 - 2003-01-18 => 2  11 9
2004-02-02 - 2004-06-24 => 0  4  23

谢谢

共有2个答案

殳勇
2023-03-14

在Groovy中找到了这个,不确定它是否符合您的要求,但它在问题中给出了结果:

def dateMalarkey(Date from, Date to) {
    def val = [from, to].collect { d ->
        def cal = Calendar.instance
        cal.time = d
        [y: cal[Calendar.YEAR], m: cal[Calendar.MONTH], d: cal[Calendar.DAY_OF_MONTH]]
    }.inject { p, n ->
        [y: Math.abs(p.y - n.y), m: Math.abs(p.m - n.m), d: Math.abs(p.d - n.d)  + 1]
    }
    val.days = val.y * 365 + val.m * 30 + val.d
    val
}

def inputs = [
    [from: '2014-02-01', to: '2015-02-01'],
    [from: '2000-02-10', to: '2003-01-18'],
    [from: '2004-02-02', to: '2004-06-24']
]

inputs.each { d ->
    println "$d.from - $d.to => " +
        dateMalarkey(Date.parse('yyyy-MM-dd', d.from), Date.parse('yyyy-MM-dd', d.to))
}
伍成仁
2023-03-14

你的例子似乎不一致。在第一种情况下,结束日期是排他性的,在另两种情况下,结束日期是包容性的。e、 g.2015-01-01到2015-01-01应该给出0d还是1d?假设是独占的,您需要的似乎可以这样做:将fromDate设置为yearFrom、monthFrom和daysFrom,将toDate设置为yearTo、monthTo和daysTo:

days = -yearFrom*365-monthFrom*30-daysFrom+yearTo*365+monthTo*30+daysTo

假设一年365天,一个月30天,你会得到天数的差异。那么,区别将是:

yearDifference = days/365 (as integer)
monthDifference = (days%365)/30
daysDifference = (days%365)%30

评论后编辑:如果你需要它的包容性,根据最后两个例子,只需在“天”中添加一个:

days = -yearFrom*365-monthFrom*30-daysFrom+yearTo*365+monthTo*30+daysTo+1
 类似资料:
  • 问题内容: 我想计算年份和月份中两个datetime.date()日期之间的差异。 例如; 所需结果: 谢谢。 问题答案: 如果您能够安装出色的dateutil软件包,则可以执行以下操作:

  • Python3 实例 以下代码通过导入 calendar 模块来计算每个月的天数: # Filename : test.py # author by : www.runoob.com import calendar monthRange = calendar.monthrange(2016,9) print(monthRange) 执行以上代码输出结果为: (3, 30) 输出的是一个元

  • 我正在开发一个程序,它采用开始日期和结束日期,并返回年、月和日的不同值。每个类别都有自己的代码部分,这是我一直在使用的代码,到目前为止,它一直是半精确的,直到几天(有时是几个月。我甚至不想在这一点上愚弄闰年) Ex Start:04/10/2000 End:04/10/2006应该给我6年零个月零天。 年份代码: 月份代码: 天数代码:我已经尝试了多个版本,但没有太大的成功,例如,我可以计算天数之

  • 我试图在我正在创建的C#应用程序中显示两个日期之间的年、月和日。(使用控制台进行测试) 我正在使用NodaTime来实现这一点,但在接下来的几个月里,我遇到了一些问题。 我已经阅读了这里的大部分问题和答案,但没有找到任何我可以从中受益的东西。 大多数时候函数工作但有时它不添加月如果天 我使用这个代码进行测试 (2017, 10, 16)和(2018, 1, 15)应该显示为3个月,但它们显示为2个

  • 似乎不能处理一个数字的月份中的某一天: 在此示例中,正确解析日期,但引发异常。如果我使用零填充日期,例如“05/03/1969”,则两者都起作用。但是,如果每月的日期或每年的月份都是个位数,则将引发异常。 什么是格式来解析一个数字和两位数的月份和一年中的月份?

  • 本文向大家介绍php计算年龄精准到年月日,包括了php计算年龄精准到年月日的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php计算年龄精准到年月日的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家学习php程序设计有所帮助。