2011-01-28 31 views
6

我试图创建一个'固定'时间(24小时制,午夜时间格式,即00:00:00)设置为SQL SELECT查询使用的字符串以下...GregorianCalendar /日历并设置小时字段奇怪

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.

有没有人可以解释此问题并帮助我找到修复方法(或其他替代方法)请?

回答

11

您需要设置HOUR_OF_DAY0而不是HOUR

todayDate.set(Calendar.HOUR_OF_DAY, 0); 

从API docs

HOUR场数获取和设置,指示上午或下午的小时。 HOUR用于12小时制时钟(0 - 11)。中午和午夜用0表示,不用12表示。例如,在10点04分15.250点,小时为10.

HOUR_OF_DAY get和set的字段编号表示一天中的小时。 HOUR_OF_DAY用于24小时制。例如,在10:04:15.250 PM,HOUR_OF_DAY是22.

+0

Aaargh!我不敢相信这很简单。谢谢。 – Squonk 2011-01-28 01:25:36