【问题标题】:calculating remaining days with daylight saving using JODA API使用 JODA API 计算夏令时剩余天数
【发布时间】:2025-12-27 19:10:11
【问题描述】:

我有一个要求,比如计算两个日期之间的天数,并通过在日期上加上周/月来计算未来的日期。我使用了 java.util.Calendar;和 java.util.日期。这些都没有给出准确的结果,它在夏令时问题上失败了。所以我决定使用 JODA 日历 API。我对 JODA API 很陌生。请任何人提供示例代码来计算以下要求。

1).noOfDays(字符串 currDate, 字符串 tarDate) 2).addMonths(字符串日期,整数月) 3).addDays(字符串日期,整数天) 4).futureDate(String date,int week)

谢谢 象头神

【问题讨论】:

  • 您是否已经浏览过 Joda Time API?你走了多远?你为什么首先使用String 来表示日期?你的futureDate 方法是什么意思?
  • 我刚刚开始查看,我正在从字符串格式的文本字段中获取日期,例如“12/12/2012”,futureDate 方法将给出未来时间发生的日期添加周数。
  • 那为什么不像addDaysaddMonths那样叫addWeeks呢?此外,将文本处理与其他所有内容隔离开来——首先要做的是解析日期(例如,解析为LocalDate)。
  • @Ganesh 我写了这封Joda-Time Tutorial 来解决 Joda-Time 的几个常见用例。理论部分主要基于文档,因此您可以跳过它并直接进入示例。如果您刚开始探索 Joda-Time API,它可能对您有用。
  • 非常好的教程,它为我节省了很多时间。非常感谢@Andrey Polunin

标签: java android calendar jodatime android-calendar


【解决方案1】:

0) 要将字符串转换为日期,请使用
DateTimeFormatter
例如,如果你的约会看起来像 "31/12/2012"

DateTimeFormatter dtf = DateTimeFormat.forPattern("dd/MM/yyyy");  
DateTime date = dtf.parseDateTime("31/12/2012");  

此类ISODateTimeFormat 包含基本日期格式的格式化程序。
1) 计算两个日期之间的天数,使用方法Days#daysBetween
比如

DateTime date1 = dtf.parseDateTime("31/12/2012");    
DateTime date2 = dtf.parseDateTime("15/11/2012");  
int daysbetween = Days.daysBetween(date1, date2);

2) 使用DateTime#plusMonths() 添加月份日期

DateTime newDate = dtf.parseDateTime("31/12/2012").plusMonths(5);  

3) 添加日期使用方法DateTime#plusDays()
4) 添加星期到日期使用方法DateTime#plusWeeks()
如果您使用没有时间的日期,您也可以使用LocalDate 类而不是DateTime

【讨论】:

  • 如何计算过去日期和未来日期之间的差异。即给出 -ve 天的结果。
  • @Ganesh Days.daysBetween(passedDate, futureDate);