java是否将日历设置为特定日期?
我想在特定日期设置通知提醒。然后,我目前正在将AlarmManager与NotificationManager一起使用。当我从dateDialog设置所选日期时,提醒正在工作。如何将日历值设置为固定时间的闹钟?我从以下位置获取当前日期和时间:
Calendar calendar = Calendar.getInstance();
然后,我可以手动设置日历,如下所示,日历正常工作:
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 13);
calendar.set(Calendar.HOUR, 7);
calendar.set(Calendar.AM_PM, Calendar.AM);
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DAY_OF_MONTH, 8);
calendar.set(Calendar.YEAR,2015);
long when = calendar.getTimeInMillis();
但我的问题是,如何将日历设置为明天和上午9:00,或将日历精确设置为当前日期之后的某个月(或年份)?我的意思是这样的:
calendar.add(Calendar.DAY_OF_MONTH, 1);
但它不起作用
# 1 楼答案
乔达时间
更新:项目Joda-Time现在位于maintenance mode,团队建议迁移到java.time类。见Tutorial by Oracle
尝试使用更好的日期时间库,例如Joda time
在Joda Time中,您可以更改日期,同时保留一天中的时间。或者,反之亦然,在保留日期的同时保留一天中的时间
# 2 楼答案
对我来说,这在桌面上运行很好,
无法在Android上测试。更新:刚刚用AIDE在我的Android手机上测试了这个,得到了完全相同的结果
对于本测试,我的输出正是您所期望的:
# 3 楼答案
tl;博士
爪哇。时间
现代方法使用java。时间类取代了麻烦的旧遗留日期时间类<所以现在更容易更干净了
你的代码模棱两可,因为你没有解决时区的关键问题。由于没有明确指定时区,JVM的当前默认时区将被隐式应用。我强烈建议始终指定您想要/期望的时区
以} 、^{} 或
continent/region
的格式指定一个proper time zone name,例如^{Pacific/Auckland
。千万不要使用3-4个字母的伪时区,比如EST
或IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)你也可以使用组合因子法
我通常不建议从epoch开始计算日期时间。但这似乎是你的要求
首先,我们可以提取一个} 类表示UTC中时间轴上的一个时刻,分辨率为nanoseconds(最多九(9)位小数)
Instant
,UTC中的一个时刻。^{然后,您可以在UTC 1970-01-01T00:00:00Z中询问自1970年第一个时刻的历元参考以来的毫秒计数。当心可能的数据丢失,因为
Instant
中的任何微秒或纳秒在报告毫秒时都将被忽略关于java。时间
java.time框架内置于Java8及更高版本中。这些类取代了legacy日期时间类,比如^{} 、^{} 、&^{}
现在位于maintenance mode的Joda-Time项目建议迁移到java.time类
要了解更多信息,请参阅Oracle Tutorial。并在Stack Overflow中搜索许多示例和解释。规格是JSR 310
使用与JDBC 4.2或更高版本兼容的JDBC driver,您可以交换java。时间对象直接与数据库连接。不需要字符串或java。sql.*上课
在哪里可以获得java。时间课
ThreeTen-Extra项目扩展了java。有额外课程的时间。这个项目是java未来可能增加的一个试验场。时间你可以在这里找到一些有用的类,比如^{} 、^{} 、^{} 和more
# 4 楼答案
要通过示例添加一小时,可以执行以下操作: