我在用Java重置小时数时遇到问题。对于给定的日期,我要将小时设置为00:00:00。
这是我的代码:
/**
* Resets milliseconds, seconds, minutes and hours from the provided date
*
* @param date
* @return
*/
public static Date trim(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR, 0);
return calendar.getTime();
}
问题是,时间有时是这样12:00:00
,有时是这样00:00:00
,当我在数据库中查询保存07.02.2013 00:00:00
的实体时,以及存储的实际实体时间是12:00:00
查询失败。
我知道12:00:00 == 00:00:00
!
我正在使用AppEngine。这是Appengine错误,问题还是其他问题?还是取决于其他因素?
使用另一个常数代替Calendar.HOUR
,使用Calendar.HOUR_OF_DAY
。
calendar.set(Calendar.HOUR_OF_DAY, 0);
Calendar.HOUR
使用0-11(用于AM / PM),并Calendar.HOUR_OF_DAY
使用0-23。
引用Javadocs:
公共静态最终int HOUR
获取和设置的字段号,指示上午或下午的时间。HOUR用于12小时制(0-11)。中午和午夜用0而不是12表示。例如,在10:04:15.250 PM,小时是10。
和
公共静态最终int HOUR_OF_DAY
get和set的字段号指示一天中的小时。HOUR_OF_DAY用于24小时制。例如,在10:04:15.250 PM,HOUR_OF_DAY是22。
测试(“现在”目前是2013年7月23日太平洋夏令时间的14:55):
public class Main
{
static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args)
{
Calendar now = Calendar.getInstance();
now.set(Calendar.HOUR, 0);
now.set(Calendar.MINUTE, 0);
now.set(Calendar.SECOND, 0);
System.out.println(sdf.format(now.getTime()));
now.set(Calendar.HOUR_OF_DAY, 0);
System.out.println(sdf.format(now.getTime()));
}
}
输出:
$ javac Main.java
$ java Main
2013-07-23 12:00:00
2013-07-23 00:00:00
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句