天道酬勤,学无止境

使用日历在 Java 中枚举天数(Enum of days in Java with Calendar)

问题

我想知道是否存在包含 Java 中所有工作日的现有枚举。 我正在使用日历来处理时间逻辑,但我没有看到这样的东西(我可以自己创建它,但我宁愿使用现有的东西)。 我还看到了 threeten 项目,但它仍处于 alpha 阶段。 由于包含星期几的枚举是如此微不足道,它在枚举文档中由 sun 显示,我在想某些东西可能已经存在。 有任何想法吗 ?

回答1

你想要新的 DateFormatSymbols().getWeekdays()。

回答2

In the calendar class, there is:

/**
 * Value of the {@link #DAY_OF_WEEK} field indicating
 * Sunday.
 */
public final static int SUNDAY = 1;

/**
 * Value of the {@link #DAY_OF_WEEK} field indicating
 * Monday.
 */
public final static int MONDAY = 2;

/**
 * Value of the {@link #DAY_OF_WEEK} field indicating
 * Tuesday.
 */
public final static int TUESDAY = 3;

/**
 * Value of the {@link #DAY_OF_WEEK} field indicating
 * Wednesday.
 */
public final static int WEDNESDAY = 4;

/**
 * Value of the {@link #DAY_OF_WEEK} field indicating
 * Thursday.
 */
public final static int THURSDAY = 5;

/**
 * Value of the {@link #DAY_OF_WEEK} field indicating
 * Friday.
 */
public final static int FRIDAY = 6;

/**
 * Value of the {@link #DAY_OF_WEEK} field indicating
 * Saturday.
 */
public final static int SATURDAY = 7;

(source: java.util.Calendar)

Not an enum because there were none when Calendar was introduced in JDK 1.1.

回答3

麻烦的旧日期时间类(例如java.util.Calendar )现在是遗留的,被 java.time 类所取代。

java.time.DayOfWeek枚举

Java 现在包括 java.time.DayOfWeek 枚举。

传递此枚举的对象,而不仅仅是整数 1-7,以使您的代码更具自文档性,提供类型安全性并确保一系列有效值。

invoices.printReportForDayOfWeek( DayOfWeek.MONDAY );

根据 ISO 8601 标准,周一至周日的编号为 1-7。

通过调用getDisplayName获取当天的本地化名称。

String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;  // Or Locale.US, etc.

要跟踪一周中的多天,请使用EnumSet (Set 的实现)或EnumMap (Map 的实现)。

Set<DayOfWeek> weekend = EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY ) ;
…
Boolean todayIsWeekend = weekend.contains( LocalDate.now( ZoneId.of( "America/Montreal" ) ).getDayOfWeek() );

关于 java.time

java.time 框架内置于 Java 8 及更高版本中。 这些类取代了旧的麻烦的日期时间类,例如java.util.Date.Calendarjava.text.SimpleDateFormat

现在处于维护模式的 Joda-Time 项目建议迁移到 java.time。

要了解更多信息,请参阅 Oracle 教程。 并在 Stack Overflow 上搜索许多示例和解释。

大部分 java.time 功能在 ThreeTen-Backport 中向后移植到 Java 6 和 7,并在 ThreeTenABP 中进一步适应 Android。

ThreeTen-Extra 项目通过附加类扩展了 java.time。 该项目是未来可能添加到 java.time 的试验场。 您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuarter等等。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 在 JAVA 中创建星期几的自定义集合(Create a custom collection of days-of-the-week in JAVA)
    问题 我想要一个这样的自定义日历: enum TradingDays {Monday, Tuesday, Wednesday, Thursday, Friday}; 然后我需要迭代它并检查特定的枚举元素是否是今天的星期几。 问题是 JAVA 日历与我日历中的星期几不匹配。 所以: Calendar now = Calendar.getInstance(); TradingDays.Monday is not equal to any of now.get(Calendar.DAY_OF_WEEK); 那么我如何从我的日历 TradingDays 分配星期一、星期二等与 JAVA 日历相同的类型(在这种情况下是一个整数值)? PS 我需要像这样的日历交易日,因为它会显示给用户,以便他/她选择交易的日期。 回答1 您可以尝试在枚举中使用构造函数,如下例所示: public enum Currency { PENNY(1), NICKLE(5), DIME(10), QUARTER(25); private final int value; private Currency(int value) { this.value=value; } } 在迭代时,您可以像这样使用 coin.value: for(Currency coin: Currency.values()){ System
  • Java 日历中的错误/2010 年 10 月 2 日的日期?(Bug in Java Calendar / Date for 2nd October 2010?)
    问题 我不确定我做错了什么,但我有一段代码可以计算两个日期之间的天数,它看起来像下面这样: final Calendar first = new GregorianCalendar(2010, Calendar.OCTOBER, 1); final Calendar last = new GregorianCalendar(2010, Calendar.NOVEMBER, 1); final long difference = last.getTimeInMillis() - first.getTimeInMillis(); final long days = difference / (1000 * 60 * 60 * 24); System.out.println("difference: " + difference); System.out.println("days: " + days); 总而言之,上面的代码块计算了 2010 年 10 月 1 日到 2010 年 11 月 1 日之间的天数。我希望看到它返回 31 天(因为 10 月有 31 天) difference: xxxx days: 31 但它显示的是 10 月的 30 天! difference: 2674800000 days: 30 我设法将它缩小到 2010 年 10 月 2 日和 2010 年 10
  • 检查日历日期是否为星期日(Check if the Calendar date is a sunday)
    问题 我想弄清楚如何让我的程序计算一周中的星期天数。 我尝试了以下事情: if (date.DAY_OF_WEEK == date.SUNDAY) { System.out.println("Sunday!"); } 然而它似乎不起作用? 当我尝试System.out.Println the date.DAY_OF_WEEK我得到: 7 有谁知道我如何检查当前日历日期是否是星期日? 更新更多信息 所有日期中的第一个。DAY_OF_WEEK 是一个 Calendar 对象! 我确保将日历对象date设置为星期日 当我尝试运行date.DAY_OF_MONTH时,我得到 7 的系统输出是它返回给我的,即使它设置为星期日 亚历克斯的第二次更新 这或多或少是我的代码 Calendar startDate = Calendar.getInstance(); startDate.set(2012, 12, 02); if (startDate.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { System.out.println("true"); }else { System.out.println("FALSE"); } 回答1 Calendar cal = ...; if (cal.get(Calendar.DAY_OF_WEEK) ==
  • Android / Java-日期差异(以天为单位)(Android/Java - Date Difference in days)
    问题 我正在使用以下代码获取当前日期(格式为12/31/1999,即mm / dd / yyyy): Textview txtViewData; txtViewDate.setText("Today is " + android.text.format.DateFormat.getDateFormat(this).format(new Date())); 我还有另一个日期格式为:2010-08-25(即yyyy / mm / dd), 所以我想找出日期之间的天数差异,如何找到天数之间的差异? (换句话说,我想找到当前日期-yyyy / mm / dd格式化日期之间的差异) 回答1 并不是真正可靠的方法,最好使用JodaTime Calendar thatDay = Calendar.getInstance(); thatDay.set(Calendar.DAY_OF_MONTH,25); thatDay.set(Calendar.MONTH,7); // 0-11 so 1 less thatDay.set(Calendar.YEAR, 1985); Calendar today = Calendar.getInstance(); long diff = today.getTimeInMillis() - thatDay.getTimeInMillis(); //result in
  • 【Java小攻略】时间API全解析
    文章目录 时间API全解析一、艰苦岁月(一)简述(二)时间与计算机(三)常见的API操作1、Calendar介绍2、TimeStamp介绍3、Date介绍 二、新气象(一)简述(二)常见的API操作1、LocalDate2、LocalTime3、LocalDateTime4、Instant(瞬间)5、Duration/Period6、LocalDate/LocalTime/LocalDateTime/Instant运算7、解析与格式化 (三)兼容过去 时间API全解析 一、艰苦岁月 (一)简述 在Java 1.0中,对日期和时间的支持只依赖java.util.Date类。这个类无法表示日期,只能以毫秒的精度表示时间。由于Java初期设计上的缺陷,此类的易用性非常糟糕。 表现如下: 创建具体日期的方式以及toString的输出结果让初始者感到怪异 Date date = new Date(121,1,22); System.out.println(date); 年份的起始选择是1900年,月份的起始从0开始。 所以这里的结果是 2021年 CST(北京时间) 2月22日 周一 凌晨 因为设计原因大量被淘汰的API与java.sql.Date 混用时,容易出现问题。 在Java 1.1中,出现了java.util.Calendar类缓解了此问题
  • Javasenior
    Javasenior 多线程的创建 方式一:继承Thread类 1.创建一个继承与Thread类的子类2.从写Thread类的run方法 -->将此线程的操作生明在方法run()之中3.创建thread类的子类对象4.通过此对象调用start方法 Thread类中的方法 Thread类中的方法 start();启动当前线程;调用线程的run(); run();通常需要重写thread类中此类的方法,将创建线程需要执行的方法声明在此方法中 currentThread();静态的方法,返回执行当前代码的线程 getName 和setName 获取和设置当前线程的名字 setName 要在start之前 构造器之中也可以给线程命名;就new在括号里面 yield();释放当前CPU的执行权 让线程再次去抢夺 join();在线程a中调用b中的join();此时线程a进入阻塞状态,直到线程b执行完以后,线程a才结束阻塞状态 stop():强制结束线程的声明周期 不推荐使用。 sleep(long millitime)单位是毫秒: 让当前线程“睡眠”指定的millitime毫秒。在指定的毫秒内,当前线程是阻塞的 isAlive();判断当前线程是否存活 线程的优先级 MAX_PRIORITY :10 MIN_PRIORITY :1 NORM_PRIORITY :5 默认 优先级
  • Java 日历:获取两个日期/时间之间的差异 - 减一(Java Calendar: Getting Difference Between Two Dates/Times - Off by One)
    问题 我已经看到很多关于这个主题的问题和答案,但没有一个解决我的特定问题。 我扩展了 java Calendar 类(标准——没有第三方库),并且需要找到两个任意日期之间的天数差异。 方法: 将两个日期的时间更改为午夜。 将日期转换为毫秒。 找出两个日期之间的差异。 将结果除以一天中的毫秒数(24 * 60 * 60 * 1000)。 结果应该是天差。 有时是,有时不是。 即使是在同一天的测试也可能相差一个。 这是怎么回事? 回答1 正如其他用户所建议的,您还需要将日历的毫秒值设置为零以仅比较日期。 这可以通过以下代码片段来实现: someCalendar.set(Calendar.MILLISECOND, 0) 另外,请注意时区变化(例如从冬令时移到夏令时)可能意味着一天中的时间多于或少于 86,400,000 毫秒。 回答2 Joda 时间库对此类问题有很好的支持: LocalDate d1 = new LocalDate(calendar1.getTimeInMillis()); LocalDate d2 = new LocalDate(calendar2.getTimeInMillis()); int days = Days.daysBetween(d1, d2).getDays(); 更新(来自@basil-bourque 的反馈): 从 Java 8 开始
  • java日历setFirstDayOfWeek不起作用(java Calendar setFirstDayOfWeek not working)
    问题 这是现在真正的日历: March 2015 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 我得到2015/3/24 DAY_OF_WEEK是这样的: public class TestCalendar { public static void main(String[] argvs){ Calendar cal = Calendar.getInstance(); cal.setFirstDayOfWeek(Calendar.MONDAY); cal.set(2015,Calendar.MARCH,24); System.out.println(cal.get(Calendar.DAY_OF_WEEK)); } } 因为我有cal.setFirstDayOfWeek到MONDAY我期望的结果是2 ,但是无论我设置为first day of week的first day of week (尝试过 SUNDAY 和其他人)。它一直向我显示相同的结果,即3 。 所以看起来firstDayOfWeek不会影响结果。 我做错了什么吗? 编辑 我只是想并感谢下面的答案,这个setFirstDayOfWeek不会影响get
  • 如何获取两个日历实例之间的天数?(How to get number of days between two calendar instance?)
    问题 我想找到两个Calendar对象之间的天数差异,如果有日期更改,例如如果时钟从23:59-0:00滴答,则应该有一天的差异。 我写了这个 public static int daysBetween(Calendar startDate, Calendar endDate) { return Math.abs(startDate.get(Calendar.DAY_OF_MONTH)-endDate.get(Calendar.DAY_OF_MONTH)); } 但是它不起作用,因为如果月份差异不值一提,它只会在几天之间产生差异。 回答1 在Java 8和更高版本中,我们可以简单地使用java.time类。 hoursBetween = ChronoUnit.HOURS.between(calendarObj.toInstant(), calendarObj.toInstant()); daysBetween = ChronoUnit.DAYS.between(calendarObj.toInstant(), calendarObj.toInstant()); 回答2 请尝试以下方法: public static long daysBetween(Calendar startDate, Calendar endDate) { long end = endDate
  • java日历-获取一周的最后5天(没有周末)(java calendar - get last 5 days of week (without weekend))
    问题 我正在处理一些问题。 我需要从数据库中获取一些数据 1) 获取最后 5 天的 5 条记录(每天一条记录),但这些天数必须是一周中的几天(现在是周末) 2) 获取当月的 20 条记录(当前或过去,每天一条记录) 我正在使用 Java 日历,但我仍然不知道如何获取日期。 有人可以帮我吗? 回答1 应该管用: private Calendar workingDaysBack(final Calendar from, final int count) { for (int daysBack = 0; daysBack < count; ++daysBack) { do { from.add(Calendar.DAY_OF_YEAR, -1); } while(isWeekend(from)); } return from; } private boolean isWeekend(Calendar cal) { return cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY; } 回答2 您可以通过调整您想要考虑的每一天的星期几参数来完成第一部分。 如果在几周内运行,取决于您想要什么行为 - 应该是本周还是最后一周? 在这里
  • 用Java计算日期差(Calculating difference in dates in Java)
    问题 我觉得很有趣,Java(或java.util库)没有内置函数来计算日期差。 我想从另一个减去一个日期,以获得它们之间经过的时间。 做这个的最好方式是什么? 我知道简单的方法是将时间差以毫秒为单位,然后将其转换为天。 但是,我想知道这是否在所有情况下都有效(带夏令时等)。 回答1 我知道简单的方法是将时间差以毫秒为单位,然后将其转换为天。 但是,我想知道这是否在所有情况下都有效(带夏令时等)。 如果您的时间是从UTC日期得出的,或者它们只是在同一系统上两次调用System.getCurrentTimeMillis()的时间差,则您将获得有效的毫秒数,与任何时区问题无关。 (这就是为什么所有内容都应使用UTC作为存储格式的原因-从UTC->当地时间开始要容易得多;如果尝试采用其他方式,则需要将本地时区与当地时间一起存储-或尝试推断,g!) 至于将其转换为几天,您应该只能将其除以86400000 ...注意:每隔一年左右偶尔会有一次leap秒。 回答2 如果您关注开放源代码,那么Java并不会丢失太多:尝试Joda-Time。 回答3 在Java 8中使用Joda-Time或新的java.time包。 这两个框架都使用Half-Open方法,其中开始是包含在内的,而结尾是排斥的。 有时标记为[) 。 通常,这是定义时间跨度的最佳方法。 java.time 内置于Java
  • 为什么1月在Java日历中为0?(Why is January month 0 in Java Calendar?)
    问题 在java.util.Calendar ,一月被定义为第0个月,而不是第1个月。是否有任何特定原因? 我已经看到很多人对此感到困惑... 回答1 它只是Java日期/时间API令人毛骨悚然的一部分。 列出问题所在将花费很长时间(而且我确定我不知道其中一半是问题)。 诚然,处理日期和时间是很棘手的,但是无论如何都是这样。 帮自己一个忙,请改用Joda Time或JSR-310。 编辑:至于原因-如其他答案中所述,这很可能是由于旧的C API引起的,或者只是从0开始一切的一般感觉...当然,那是从1开始的日子。 我怀疑最初的实现团队之外的人是否真的可以说出原因-但是,我再次敦促读者不要太担心为什么会做出错误的决定,而要着眼于java.util.Calendar和找到更好的东西。 一个点,这是赞成使用基于0的索引的是,它使事情变得像“名字的阵列”更容易: // I "know" there are 12 months String[] monthNames = new String[12]; // and populate... String name = monthNames[calendar.get(Calendar.MONTH)]; 当然,一旦您获得具有13个月的日历,此操作便会失败...但是至少指定的大小是您期望的月数。 这不是一个很好的理由,但这是一个理由... 编辑
  • GregorianCalendar 的奇怪行为(Strange behaviour with GregorianCalendar)
    问题 我刚刚在 GregorianCalendar 类中遇到了一个奇怪的行为,我想知道我是否真的在做坏事。 这仅在初始化日期的月份的实际最大值大于我要将日历设置为的月份时附加。 这是示例代码: // today is 2010/05/31 GregorianCalendar cal = new GregorianCalendar(); cal.set(Calendar.YEAR, 2010); cal.set(Calendar.MONTH, 1); // FEBRUARY cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); cal.set(Calendar.HOUR_OF_DAY, cal.getActualMaximum(Calendar.HOUR_OF_DAY)); cal.set(Calendar.MINUTE, cal.getActualMaximum(Calendar.MINUTE)); cal.set(Calendar.SECOND, cal.getActualMaximum(Calendar.SECOND)); cal.set(Calendar.MILLISECOND, cal.getActualMaximum(Calendar.MILLISECOND))
  • 如何从日历java获取接下来7天的日期(How to get dates for next seven days from calendar java)
    问题 所以,我有一个应用程序,用户可以在其中选择日期。 他可以选择的最大日期是从当前日期起最多 7 天。 现在,我只显示当月的日历。 如果当前日期是 7 月 30 日,则必须为用户提供一个选项来选择直到 8 月 6 日的日期,我还必须处理年份变化的情况,即 12 月 30 日,15 是当前日期,+7 天提供 16 日 6 日. 下面是我用来获取当月所有天数的代码。 我应该怎么做才能使其适用于上述情况。 注意:我总是有可用的当前日期。 代码: public class Cals { public static void main(String args[]) { Calendar start = Calendar.getInstance(); start.set(Calendar.DAY_OF_MONTH, Calendar.getInstance() .getActualMinimum(Calendar.DAY_OF_MONTH)); Calendar end = Calendar.getInstance(); end.set(Calendar.DAY_OF_MONTH, Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH)); Calendar now = Calendar.getInstance()
  • Android 日历添加日期(Android Calendar add day)
    问题 我有一个由从数据库中获取的数据填充的数组 String 。 现在对于数组的每一行,我想在日历中添加一天,今天的“0”行,明天的“1”行,明天之后的“2”行等等......我创建了这个控制位置的代码数组的每个元素,但我如何添加天数? 谢谢 Calendar prova = Calendar.getInstance(); int size = id_op.length; for(int i = 0; i< size; i++){ } 回答1 您可以以毫秒为单位获取时间,然后向其中添加一天的毫秒数。 Calendar prova = Calendar.getInstance(); int size = id_op.length; for(int i = 0; i< size; i++){ Long time = prova.getTimeInMillis(); time = time + 86400000; prova.setTimeInMillis(time); } 回答2 tl;博士 new ArrayList<>().add( LocalDate.now().plusDays( 1 ) ) 时间 您正在使用麻烦的旧Calendar类,该类现在是遗留的,由 JSR 310 中定义的java.time类取代。 LocalDate LocalDate 类表示没有时间和时区的仅日期值
  • java 日历类_Java中日历类(CalendarClass)的用途?
    展开全部 Java中日历类(Calendar类)的用途如下: Calendar类的静态方法getInstance()可以初始化一个日历对象:Calendar now = Calendar.getInstance(); 可以使用下面三个方法把e69da5e6ba903231313335323631343130323136353331333339663331日历定到任何一个时间: set(int year ,int month,int date) ; set(int year ,int month,int date,int hour,int minute) ; set(int year ,int month,int date,int hour,int minute,int second) ; 如果想获得年份、月份、小时等信息可以使用: Now.get(Calendar.Month);//这样的方法 0表示一月,1表示二月 get(Calendar.DAY_OF_MONTH);//获得这个月的第几天 get(Calendar.DAY_OF_WEEK);//获得这个星期的第几天 get(Calendar.DAY_OF_YEAR);//获得这个年的第几天 getTimeMillis();//获得当前时间的毫秒表示 1.计算某一月份的最大天数Calendar time=Calendar
  • 如何获取每月第一个星期三的日期java日历(How to get date of first Wednesday of a month java calendar)
    问题 我将如何使用 java 日历类获取本月的下一个第一个星期三的日期。 例如: Today(24/03/2012) the next first Wednesday will be 04/04/2012 On(05/04/2012) the next first Wednesday will be 02/05/2012 谢谢。 回答1 在 Java 8 及更高版本中,我们可以使用 java.time 类,包括 LocalDate 和 TemporalAdjusters,以及 DayOfWeek 枚举。 请参阅教程。 LocalDate firstSundayOfNextMonth = LocalDate .now() .with( TemporalAdjusters.firstDayOfNextMonth() ) .with( TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY) ); 回答2 这有效 设置开始日期移至下个月移动到一个月的第一天添加天数直到我们到达星期三 代码 import static java.util.Calendar.*; public static void main(String[] args) { System.out.println(getNextMonthFirstWed(new Date(112, 3 -
  • 如何在Java GWT中进行日历操作? 如何在日期中增加天数?(How to do calendar operations in Java GWT? How to add days to a Date?)
    问题 由于GWT不提供GregorianCalendar类,如何在客户端上进行日历操作? 我有一个日期a ,我想要一个日期,该日期是n之后a n天。 例子: a (2000-01-01) + n (1) -> 2000-01-02 a (2000-01-01) + n (31) -> 2000-02-01 回答1 更新了GWT 2.1的答案 final Date dueDate = new Date(); CalendarUtil.addDaysToDate(dueDate, 21); 编辑:此类的完全限定名称为com.google.gwt.user.datepicker.client.CalendarUtil。 回答2 Google似乎(当前)使用的答案是: @SuppressWarnings("deprecation") // GWT requires Date public static void addDaysToDate(Date date, int days) { date.setDate(date.getDate() + days); } 这是com.google.gwt.user.datepicker.client.CalendarUtil使用的com.google.gwt.user.datepicker.client.DatePicker 。 我想
  • Java:减去日期的最简单方法(Java: Easiest Way to Subtract Dates)
    问题 我创建了一个包含两个字段的类,这些字段需要是日期, start_date和date_passed 。 我一直在研究在 java 中使用YYYY MM DD格式的日期的最佳方法,该格式允许轻松减去日期,以及“组成”日期的能力,例如在未来。 我希望它做什么的例子...... library.circulate_book("Chemistry", **start date here**) //actual date or random date library.pass_book("Chemistry", **Date Passed here**) //random date such as 5 days after start date int days_had = Date_Passed - start_date 到目前为止,我已经找到了很多使用 Calendars 和 Date 类来格式化日期的方法,但还没有找到一种看起来像考虑到大多数日期最终都是字符串的方法。 非常感谢任何建议/小例子! 此外,任何指向示例的链接都很棒! 回答1 tl;博士 通过添加/减去天数从一个日期移动到另一个日期。 LocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) .minusDays( 5 ) 计算两个日期之间经过的天数、月数和年数。
  • Java中两个日期之间的天数差异?(Difference in days between two dates in Java?)
    问题 我需要找到两个日期之间的天数:一个是来自报表,另一个是当前日期。 我的片段: int age=calculateDifference(agingDate, today); 在这里, calculateDifference是一个私有方法, agingDate和today是Date对象,只是为了您的澄清。 我关注了Java论坛上的两篇文章,线程1 /线程2。 它在独立程序中可以正常工作,尽管当我将其包含在逻辑中以从报告中读取内容时,值会出现不寻常的差异。 为什么会发生这种情况,我该如何解决? 编辑 : 与实际天数相比,我得到的天数更多。 public static int calculateDifference(Date a, Date b) { int tempDifference = 0; int difference = 0; Calendar earlier = Calendar.getInstance(); Calendar later = Calendar.getInstance(); if (a.compareTo(b) < 0) { earlier.setTime(a); later.setTime(b); } else { earlier.setTime(b); later.setTime(a); } while (earlier.get(Calendar