我将数据库中的日期时间戳存储为UTC值,同时将其检索回来,我需要将其作为UTC时间,并需要转换为特定的时区值。
即。 2015-05-01 00:09:30:00 UTC时间 需要转换为IST(或其他时区)
resultSet.getDate("VisitDate")
请帮忙解决这个问题。
答案 0 :(得分:10)
您可以使用ZonedDateTime
设置为UTC,然后使用类似的内容将其翻译为LocalDateTime
java.sql.Timestamp ts = resultSet.getTimestamp("VisitDate");
ZonedDateTime utcDateTime = ZonedDateTime.ofInstant(ts.toInstant(), ZoneId.of("UTC"));
LocalDateTime localDateTime = utcDateTime.withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime();
显然,我在示例中使用ZoneId.systemDefault()
(将分区日期/时间转换为本地日期/时间),但您可以传递您想要/需要的区域
与Joda-Time类似,如果您不使用Java 8
java.sql.Timestamp ts = resultSet.getTimestamp("VisitDate");
LocalDateTime utcDateTime = new LocalDateTime(ts, DateTimeZone.UTC);
DateTime hereDateTime = utcDateTime.toDateTime(DateTimeZone.getDefault());
答案 1 :(得分:1)
private final static String DATEFORMAT = "yyyy-MM-dd HH:mm:ss";
public static String getCurrentTimeInUTC(){
final SimpleDateFormat sdf = new SimpleDateFormat(DATEFORMAT);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
final String utcTime = sdf.format(new Date());
return utcTime;
}
U可以将UTC字符串更改为任何已知的时区字符串以获得该格式。如果这有用,请投票。 要更改时区,您可以使用此功能
public static String getLocalTime(String timeZone) throws ParseException{
DateFormat formatter = null;
Date convertedDate = null;
DateFormat outputFormat=new SimpleDateFormat(DATEFORMAT);
formatter = new SimpleDateFormat(DATEFORMAT);
formatter.setTimeZone(TimeZone.getTimeZone(timeZone));
convertedDate = (Date) formatter.parse(getCurrentTimeInUTC());
return outputFormat.format(convertedDate);
}
享受: - )
答案 2 :(得分:1)
正如你所说的那样,你在设置为UTC时区时,但是当从DB重新回溯时区时,它不能再是UTC,因为DB不会存储时区信息以获取更多详细信息,请查看此链接 Dealing with Timezones in DB
因此,它可能会返回本地JVM或数据库服务器时区设置的时区。
无论如何要更改其他答案中提到的时区,您可以使用SimpleDateFormat
final SimpleDateFormat sdf = new SimpleDateFormat(DATEFORMAT);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
final String utcTime = sdf.format(new Date());