这是我的代码
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.
任何建议。
答案 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());