6

我正在创建一个Calendar实例(当前时间),然后设置小时分钟和上午/下午

Calendar now = Calendar.getInstance();

now.set(Calendar.HOUR,12);
now.set(Calendar.MINUTE,0);
now.set(Calendar.AM_PM,1);

然后,如果我尝试从现在的 Calendar 实例中获取 am/pm,它总是错误地设置为 am 和 1 天前。这似乎只发生在第 12 小时,而没有其他小时。这里有什么问题?我设置它们的顺序是否重要,或者在 12 小时的情况下,我应该使用 24 小时格式来设置“现在”实例吗?是的,我应该提到,这是在 Android 上。

4

3 回答 3

18

这是因为一天中的每一半都从零时到 11 小时结束。从数学上讲,没有第 12 小时(即使我们在现实生活中一直使用它)。所以你的意思是在 PM 期间设置为零小时,所以:

    now.set(Calendar.HOUR, 0);
    now.set(Calendar.MINUTE,0);
    now.set(Calendar.AM_PM, Calendar.PM);

通过将小时设置为 12,您可以告诉日历(正确或错误,您必须询问 Oracle 工程师)将其设置为下午时段的第 12 小时,这最终是上午时段的零小时第二天。

半天只有 12 个小时,而且这个计数是从零开始的,所以从数学上讲,没有第 12 个小时。它是零。这有点违反直觉,因为我们习惯于说它是 12:30,而不是 0:30。

于 2013-01-11T21:14:49.767 回答
1

对我来说更好的答案是 AndroidDev

如何在日历中将时间设置为 24 小时格式 他说使用 Calendar.HOUR_OF_DAY 所以它应该是 now.set(Calendar.HOUR_OF_DAY, 0);

于 2014-07-20T14:13:53.597 回答
0
于 2017-02-26T03:45:33.353 回答