日历的AM和PM值错误在12?

时间:2012-05-15 22:36:31

标签: java android

以下是我用来将日期移回3小时的代码。它显示新时间和下午值。但是当它到达下午12点或者它将新时间的上午时间值更改为与它来自的12时相同。即如果它设置在上午12点,新值是9pm,则输出9pm。我错过了一些简单的事吗?我是否正确地考虑过这个问题,因为上午12点是午夜?

         calendar.set(Calendar.HOUR, HourValue);
         calendar.set(Calendar.MINUTE, MinValue);
         calendar.set(Calendar.SECOND, 0);
         if(AMPM.equals("AM")){ampmval=0;}
         else{ampmval=1;}
         Log.e("AMPMVAL Before",Integer.toString(ampmval));

         sdf = new SimpleDateFormat("hh");
         NewHourValue = sdf.format(calendar.getTime());
         Log.e("Before Time",NewHourValue);

         calendar.set(Calendar.AM_PM, ampmval);
         calendar.add(Calendar.MINUTE, -300);

         int AmOrPm = calendar.get(Calendar.AM_PM);
         Log.e("AMPMVAL After",Integer.toString(AmOrPm)); 
         sdf = new SimpleDateFormat("hh");
         NewHourValue = sdf.format(calendar.getTime());
         Log.e("After Time",NewHourValue);

这会输出类似

的内容
05-15 23:07:11.233: E/Before Time(457):   09:00:00 PM
05-15 23:07:11.240: E/AMPMVAL After(457): 0
05-15 23:07:11.640: E/After Time(457):    06:00:00 AM
05-15 23:07:23.369: E/AMPMVAL Before(457):0
05-15 23:07:23.742: E/Before Time(457):   10:00:00 PM
05-15 23:07:23.749: E/AMPMVAL After(457): 0
05-15 23:07:24.113: E/After Time(457):    07:00:00 AM
05-15 23:07:28.320: E/AMPMVAL Before(457):0
05-15 23:07:28.712: E/Before Time(457):   11:00:00 PM
05-15 23:07:28.720: E/AMPMVAL After(457): 0
05-15 23:07:29.112: E/After Time(457):    08:00:00 AM
05-15 23:07:34.700: E/AMPMVAL Before(457):1
05-15 23:07:35.300: E/Before Time(457):   12:00:00 AM
05-15 23:07:35.330: E/AMPMVAL After(457): 1
05-15 23:07:35.693: E/After Time(457):    09:00:00 PM

正如你所看到的那样,当我在凌晨12点(午夜)之前的几个小时内增加它时工作正常,但是当它到达午夜时它然后说新的值也在上午

2 个答案:

答案 0 :(得分:2)

您在午夜/中午使用的价值是多少? 0和12不相同。

例如午夜,您必须将AM_PM设为AM,将HOUR设为0(而不是12)。 AM / PM格式的DateFormat输出将在午夜12点显示。

答案 1 :(得分:1)

我建议在Calendar Object初始化df对象中显示精确的小时字符串,如下面给出的:

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”); 然后转换为Calendar对象的日期字符串2012-05-19 12:00:00将Hour设为12而不是0。

但您使用的是日期格式

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);

然后12将在小时内转换为0