java - 用其他时区替换日期的时区,日期应该相同

标签 java date

<分区>

我有一个约会可以说

Date date = new Date(); //Thu Mar 31 04:34:37 AKDT 2016

我想把它转换成另一个日期:

Thu Mar 31 00:00:00 UTC 2016

意味着我做了两个改变:

  1. 将时间重置为 00
  2. 其余时区为 UTC,但日期应相同,即 31。

我写了这段代码:

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND,0);
        calendar.clear(Calendar.MILLISECOND);
        return calendar.getTime();

但它给出的是 Wed Mar 30 10:30:00 AKDT 2016 但我想要 Wed Mar 31 00:00:00 UTC 2016

我该如何实现?

最佳答案

您应该在格式化程序中指定时区和正确的格式,并根据该格式输出:

Date date = new Date();
TimeZone utc = TimeZone.getTimeZone("UTC");
Calendar calendar = Calendar.getInstance(utc);
calendar.setTime(date);

// ... erase time as you do now

// here is a format you need (taken from `Date.toString()`)
DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
df.setTimeZone(utc);
System.out.println(df.format(calendar.getTime()));  // Thu Mar 31 00:00:00 UTC 2016

当您尝试将 Date 打印为 date.toString() 时,您将始终获得默认时区的结果,因为 Date它本身只是一个时刻,它不保留任何有关时区的信息。

如果您只需要将当前日期时间调整为 UTC 午夜,那么您的代码是正确的。 10:30:00 AKDT 不应让您感到困惑——这仅意味着当 UTC 午夜时,在您的时区是 10:30。

关于java - 用其他时区替换日期的时区,日期应该相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36334033/

相关文章:

java - 如何将数据插入二维多维数组?

java - JAVA计算两个日期之间的天数(捕获ParseException错误)

java - Maven 不使用 Java 7

java - JAVA中基于红黑树实现TreeMap的说明

C#:DateTime - 经历了几天?

java - 如何从日期字符串中获取分隔符?

java - Java 日历中一年中的某个星期有错误吗?

java - Selenium 将工作日添加到日期,周末计算不正确

java - <html :select> problem with <html:options> tag

java - 如何使用 jdbc 和 Postgres 将复合类型数组转换为 java 对象数组?