将日历对象小时设置为0

时间:2014-10-01 09:25:27

标签: java calendar timestamp

这是我的代码

    TimeZone timeZone = TimeZone.getTimeZone("UTC");
    Calendar calendar = Calendar.getInstance(timeZone);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0); 
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    Timestamp start = new Timestamp(calendar.getTime().getTime());

但是时间戳结果是例如= 2014-09-30 02:00:00.0我无法将小时数设置为0.

任何建议。

2 个答案:

答案 0 :(得分:2)

致电Calendar.getTime()后,您会收到一个Date对象,该对象是无时区信息的即时时间。

如果要打印或显示此实例,格式化程序将使用默认时区(如果未明确指定),在您的情况下不是UTC但可能是CET。

当您将此瞬间转换为String时,您还必须告诉您希望它出现在哪个时区。您还必须在那里指定UTC时区。

例如,如果使用SimpleDateFormat,则可以使用其setTimeZone()方法。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

System.out.println(sdf.format(start));

此外,如果您的结果来自您的数据库,则必须使用不带时区的timestamp SQL类型或使用UTC时区。

答案 1 :(得分:1)

我客人icza是对的。

可以肯定的是,试试这个:

Timestamp start = new Timestamp(calendar.getTime().getTime());
System.out.println(start.getTimezoneOffset());