如何在java中将月份转换为确切的天数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在java中将月份转换为确切的天数相关的知识,希望对你有一定的参考价值。
我有一个要求,我必须比较2个变量。一个是两个日期之间的差异,即“购买日期”和“收到的日期呼叫”,它以天为单位。另一个是保修长度,它来自UI作为月份。现在,我无法比较这两个,因为一个是几个月而另一个是几天。有人可以帮助我如何将月数转换为几天,以便我可以继续前进。
for (ModelWarranty warr : modelWarranties)
{
if (null != warr.getWarrantyType()
&& warr.getWarrantyType().equals("WARR")
&& warr.getWarrantyPeriod().equals("0"))
//WARRANTY_PERIOD "0" means value from UI saves in DB as days
{
}
if (null != warr.getWarrantyType()
&& warr.getWarrantyType().equals("WARR")
&& warr.getWarrantyPeriod().equals("1"))
//WARRANTY_PERIOD "1" means value from UI saves in DB as months
{
Integer months = warr.getWarrantyLength();
//how to convert this months into days?
}
if (null != warr.getWarrantyType()
&& warr.getWarrantyType().equals("WARR")
&& warr.getWarrantyPeriod().equals("2"))
//WARRANTY_PERIOD "2" means value from UI saves in DB as years
{
Integer years = warr.getWarrantyLength();
//how to convert this years into days?
}
}
如果你所拥有的只是那两个数字,你就不能。假设您有29天的时间收到电话,保修期限为1个月。 29天可能是1月15日至2月13日,不到1个月。或者他们可能是从2018年2月15日到3月16日,一个多月。您需要知道购买日期或其他内容,以便将日期和月份锚定到日历。
如果那是我,我可以手工编写转换表,显示特定月份的最大天数,以确保始终为客户提供他们有权获得的信用。 1个月可以是31天。两个月可能是62天(例如7月和8月)。三个月不能超过92天(31 + 31 + 30)。 12个月可能是366天,但24个月只能是731天,因为连续两年从未有过两次。请自己填写其余的。
书呆子编辑:我相信您可以通过从2017年1月开始向后计算来构建转换表。所以1个月是1月= 31天。两个月是2016年12月+ 2017年1月= 31 + 31 = 62.三个月是2016年11月到2017年1月。这种方式的诀窍是:你首先得到一组两个31天的月份。您尽早获得两个这样的团体(2016年7月至8月和2016年12月至2017年1月)。你可以尽可能晚地获得2月份的短月,并且第一次获得它,这是闰年(2016年2月)。数到48个月。如果保修期更长,比如100个月,那么将其视为48 + 48 + 4个月,看看这些月份单独计算和总和。因为闰年周期长达48个月(= 4年)。这并非总是如此,例如2100年不会是闰年;但如果保修期不能超过199年,您获得的数字将是正确的。
为了记住数月可以有30/31/28天,我会在几个月内进行比较:
double numMonths; //number of months you get from your program
double numDays; //number of days you get from your program for the second date
double daysInMonths = numDays * (12/365.25);
double difference = Math.abs(daysInMonths-numMonths);
这样,您可以将月份中的日期与几天中的日期进行比较,而不会出现任何问题。
Note that a year has 365,25 days, exactly!
以上是关于如何在java中将月份转换为确切的天数的主要内容,如果未能解决你的问题,请参考以下文章