我从一个字符串中解析了一个java.util.Date,但它将本地时区设置为date对象的时区。
在解析Date的字符串中没有指定时区。我想设置date对象的特定时区。
我该怎么做呢?
我从一个字符串中解析了一个java.util.Date,但它将本地时区设置为date对象的时区。
在解析Date的字符串中没有指定时区。我想设置date对象的特定时区。
我该怎么做呢?
当前回答
请注意,java.util.Date对象本身不包含任何时区信息—您不能在Date对象上设置时区。Date对象所包含的唯一内容是从“epoch”开始的毫秒数——1970年1月1日00:00:00 UTC。
如ZZ Coder所示,您可以在DateFormat对象上设置时区,以告诉它您希望在哪个时区显示日期和时间。
其他回答
这段代码在我正在开发的应用程序中很有帮助:
Instant date = null;
Date sdf = null;
String formatTemplate = "EEE MMM dd yyyy HH:mm:ss";
try {
SimpleDateFormat isoFormat = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss");
isoFormat.setTimeZone(TimeZone.getTimeZone(ZoneId.of("US/Pacific")));
sdf = isoFormat.parse(timeAtWhichToMakeAvailable);
date = sdf.toInstant();
} catch (Exception e) {
System.out.println("did not parse: " + timeAtWhichToMakeAvailable);
}
LOGGER.info("timeAtWhichToMakeAvailable: " + timeAtWhichToMakeAvailable);
LOGGER.info("sdf: " + sdf);
LOGGER.info("parsed to: " + date);
calendar是使用JDK类处理时区的常用方法。Apache Commons还有一些可能有用的替代方案/实用程序。Edit Spong的留言提醒我,我听说Joda-Time真的很不错(尽管我自己没有用过)。
DateFormat使用。例如,
SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
isoFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = isoFormat.parse("2010-05-23T09:01:02");
请注意,java.util.Date对象本身不包含任何时区信息—您不能在Date对象上设置时区。Date对象所包含的唯一内容是从“epoch”开始的毫秒数——1970年1月1日00:00:00 UTC。
如ZZ Coder所示,您可以在DateFormat对象上设置时区,以告诉它您希望在哪个时区显示日期和时间。
package org.example;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class time {
public static void main(String[] args) {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Jakarta"));
Date date=new Date();
sdf.format(date);
System.out.println(sdf.format(date));
}
}