以下是我用来将日期移回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点(午夜)之前的几个小时内增加它时工作正常,但是当它到达午夜时它然后说新的值也在上午
答案 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