GregorianCalendar / Calendar并设置HOUR字段奇怪

时间:2011-01-28 00:56:33

标签: android gregorian-calendar

我正在尝试创建一个“固定”时间(24小时时钟格式的午夜,即00:00:00),以使用以下内容设置为SQL SELECT查询的字符串...

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

GregorianCalendar todayDate = new GregorianCalendar();
Log.d(TAG, "todayDate: " + todayDate.getTime().toString());
Log.d(TAG, "formatted todayDate: " + sdf.format(todayDate.getTime()));
todayDate.clear(Calendar.HOUR);
todayDate.clear(Calendar.MINUTE);
todayDate.clear(Calendar.SECOND);
todayDate.set(Calendar.HOUR, 0);
todayDate.set(Calendar.MINUTE, 0);
todayDate.set(Calendar.SECOND, 0);
Log.d(TAG, "formatted modified todayDate: " + sdf.format(todayDate.getTime()));

这是好的,除非当前时间是PM。例如,

todayDate: Fri Jan 28 23:34:34 GMT 2011
formatted todayDate: 2011-01-28 23:34:34
formatted modified todayDate: 2011-01-28 12:00:00 <- THE hour is 12 not 00

如果我在当前时间在午夜和中午之间(即00:00:00 - >上午11:59:59)之间执行此操作,那么我在格式化字符串中的小时会正确设置为00.如果我在中午之后和午夜之前的任何时间都这样做,然后我得到12小时而不是00小时。

有人可以解释一下并帮我找一个解决方法(或其他做事方式)吗?

1 个答案:

答案 0 :(得分:13)

您需要将HOUR_OF_DAY设置为0而不是HOUR

todayDate.set(Calendar.HOUR_OF_DAY, 0);

来自API docs

  

HOUR获取和设置的字段编号,表示上午或下午的小时。小时用于12小时制(0 - 11)。中午和午夜由0表示,而不是由12表示。例如,在10:04:15.250 PM,HOUR为10。

     

HOUR_OF_DAY获取和设置的字段编号,表示当天的小时。 HOUR_OF_DAY用于24小时制。例如,在10:04:15.250 PM,HOUR_OF_DAY是22。