繁体   English   中英

将天数(int)转换为Java中的天,月和年(包括leap年)

[英]Converting number of days(int) into days,months and years in java (including leap year)

  1. 我使用此代码将天数转换为尊重的天,月和年
  2. 但是结果并不精确,因为我没有考虑31天的leap年和month年
  3. 解决/遇到此问题的最佳方法是什么
  4. 从我的程序中输入了field_Date1和field_Date2
  5. 持续时间= field_Date2-field_Date1
  6. 持续时间是天数(整数b)
  7. 在如果我不做转换(但条件不精确)

     import java.util.concurrent.TimeUnit; import java.math.RoundingMode; import java.text.DecimalFormat; if (field_Date1 == null || field_Date2 == null){ return ""; } else { Date startDate = (Date)field_Date1; Date endDate = (Date)field_Date2; long duration = endDate.getTime() - startDate.getTime(); long diffInDays = TimeUnit.MILLISECONDS.toDays(duration); long diff = duration - TimeUnit.DAYS.toMillis(diffInDays); double diffToHours = TimeUnit.MILLISECONDS.toHours(diff); float hoursToDay = (float) (diffToHours / 24.0); float a =hoursToDay+diffInDays; a=Math.floor(a) int b = (int)a if(b<30) { StringBuilder sb = new StringBuilder("Day: ") sb.append(b) String c = sb.toString() c } else if(b<366) { int months = b/30 int days_out=b%30 StringBuilder p1 = new StringBuilder("Days: ") StringBuilder p2 = new StringBuilder("Months: ") StringBuilder p3 = new StringBuilder(" ") p1.append(days_out) p2.append(months) p2.append(p3) p2.append(p1) String c=p2.toString() c } else { StringBuilder p1 = new StringBuilder("Months: ") StringBuilder p2 = new StringBuilder("Years: ") StringBuilder p3 = new StringBuilder(" ") StringBuilder p4 = new StringBuilder("Days: ") int years = b/365 int days_out=b%365 if(days_out>30) { int m1 = days_out/30 int m2 = days_out%30 p2.append(years) p1.append(m1) p4.append(m2) p2.append(p3) p2.append(p1) p2.append(p3) p2.append(p4) String hj = p2.toString() return hj } else { p4.append(days_out) p2.append(years) p2.append(p3) p2.append(p4) String c=p2.toString() return c } } } 

乔达时代

尝试使用Joda-Time 2.5:

片段将如下所示:

import java.util.Date;
import org.joda.time.DateTime;
import org.joda.time.Days;

Date startDate = (Date)field_Date1;
Date endDate = (Date)field_Date2;
int days = Days.daysBetween( new DateTime(startDate), new DateTime(endDate) ).getDays(); 

java.time

或者可以使用java.time(Java8)中的以下方法:

public static Period between(LocalDate startDateInclusive,
                             LocalDate endDateExclusive)

这将获得两个日期之间的时间段,包括年,月和日的数量。

如果您希望以天为单位的两个日期之间的差值(包括leap年在内),则java.time包 (Java 8中的新增功能)为您提供:

LocalDate firstDate = LocalDate.of(2014, Month.DECEMBER, 1);
LocalDate secondDate = LocalDate.of(2016, Month.MARCH, 12);
long days = firstDate.until(secondDate,ChronoUnit.DAYS);

给您467天。

或者,

Period period = firstDate.until(secondDate);

将为您提供一个Period对象,该对象存储分解成年,月和日的时间,即。 而不是467天,而是1年3个月11天。 这有利于人类阅读。 但是,如果您想要总天数,那么从Period对象中获取该天数并不容易,因此最好选择我给的第一个选项。

暂无
暂无

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

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