【发布时间】:2014-12-01 09:41:50
【问题描述】:
- 我使用此代码将天数转换为相应的日、月和年
- 但结果并不准确,因为我没有考虑闰年和闰月 31 天
- 解决/遇到此问题的最佳方法是什么
- field_Date1 和 field_Date2 是我的程序输入的
- duration=field_Date2-field_Date1
- duration 是天数(int b)
-
在 if else 我做转换(但条件不精确)
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 } } }
【问题讨论】:
-
你能从 Java 8 或 Joda Time 使用 java.time 吗?这两个都会让它更干净......
-
@JonSkeet java.time 中可以使用什么函数?我在tutorialspoint中看到了方法描述,但是该方法更多的是比较,很可能无法解决我的问题,先生
-
好吧,如果你能确认你可以使用 Java 8,我会把它写下来作为答案......但如果你给出具体的例子,它也会很有用,并说什么输入数据所在的表格。(
java.util.Date不是一个很好的起点。) -
@JonSkeet 我对docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html 做了一些研究。先生,你能给我任何提示/要使用什么功能,因为我想先试试我自己的。任何粗略的想法也很乐意分享。提前致谢。*(我首先阅读了您关于 Stack Overflow 相关电子邮件的博文)
-
DS Stack 现在已经给出了 Joda Time 和 Java 8 的答案。基本上,Period 类型在这两种情况下都是你的朋友......