Java 将日历对象小时设置为0
这是我的密码Java 将日历对象小时设置为0,java,calendar,timestamp,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.s
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
任何建议。我认为客人icza是对的
当然,请尝试以下方法:
Timestamp start = new Timestamp(calendar.getTime().getTime());
System.out.println(start.getTimezoneOffset());
调用
Calendar.getTime()
后,您会得到一个Date
对象,它是一个时间上的瞬间,没有时区信息
当您要打印或显示此实例时,如果未明确指定,格式化程序将使用默认时区,在您的情况下,该时区不是UTC,但可能是CET
当你把这个瞬间转换成一个字符串,你还必须告诉你想要它出现在哪个时区。您还必须在那里指定UTC时区
例如,如果使用,则可以使用其方法
此外,如果结果来自数据库,则必须使用不带时区或UTC时区的时间戳SQL类型。结果“2014-09-30 02:00:00.0”
是如何构造的?很可能是由使用不同时区(非UTC)的格式化程序设置的。将一天中的小时设置为22,将月中的天设置为月中的天-1我建议您使用joda时间库处理此类问题:通过这种方式,您可以通过调用DateTime yourDateTime=DateTime.now()轻松创建所需的实例。withSecondOfMinute(0)。withMinuteOfHour(0)。在一天之内(0);要检索所需的日历对象,可以在joda time Calendar中选中此方法:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(sdf.format(start));