我如何获取日期时间戳为UTC

时间:2015-05-19 07:10:46

标签: java sql sql-server datetime timezone

我将数据库中的日期时间戳存储为UTC值,同时将其检索回来,我需要将其作为UTC时间,并需要转换为特定的时区值。

即。  2015-05-01 00:09:30:00 UTC时间 需要转换为IST(或其他时区)

resultSet.getDate("VisitDate")

请帮忙解决这个问题。

3 个答案:

答案 0 :(得分:10)

Java 8

您可以使用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());