【发布时间】:2013-06-15 11:14:57
【问题描述】:
我想弄清楚如何在一周中的特定日期发出警报。这是打印我期望的示例代码:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.WEEK_OF_MONTH, 1);
System.out.println("Week of month: " + calendar.get(Calendar.WEEK_OF_MONTH)); // Week of month: 1
但是当我将这个添加到代码中时,我得到了一个我不明白的结果:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
calendar.set(Calendar.WEEK_OF_MONTH, 1);
System.out.println("Week of month: " + calendar.get(Calendar.WEEK_OF_MONTH)); // Week of month: 5
我正在尝试为特定一周中的特定日期设置闹钟。今天的日期是 2013 年 6 月 15 日。谁能给我解释一下。 Joda time 不是我正在做的事情的一个选项,所以我需要使用常规的 Java 库来完成这项工作。感谢大家的帮助。
编者注
上面的代码会根据运行的日期返回不同的结果,因为Calendar.getInstance()返回一个设置为当前时间的日历。为了说明与当前时间无关的问题,请使用:
DateFormat dateFormat = DateFormat.getDateInstance();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(1371294000000L);
System.out.println(dateFormat.format(calendar.getTime()));
calendar.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
System.out.println(dateFormat.format(calendar.getTime()));
calendar.set(Calendar.WEEK_OF_MONTH, 1);
System.out.println("Week of month: " + calendar.get(Calendar.WEEK_OF_MONTH));
System.out.println(dateFormat.format(calendar.getTime()));
输出类似这样的内容(至少如果您的默认语言环境使用公历):
Jun 15, 2013
Jun 13, 2013
Week of month: 5
May 30, 2013
【问题讨论】:
-
你的时区是多少?对我来说,它打印
Week of month: 1 -
东部标准时间。我在大西洋沿岸。我清理了我的项目并再次运行它,仍然得到 5。这可能与第 1 周没有星期四有关吗?当我输入 2、3、4、5 作为周数时,我得到了我所期望的。
-
我还收到“每月的第 1 周”您是否准确复制了您的代码,或者您是否重新输入了代码,但略有不同?
-
@jhamm:就是这样。这适用于您的语言环境。本月第一周(6 月)的星期四是 5 月 30 日。
-
那么在一个月的第一周是星期五并且我想要第二周的第一个星期四的类似情况下,我如何以编程方式设置警报。必须有更好的方法!