0

我正在更改一些在 unix 机器上运行的代码。它根据伦敦的当前日期和时间为数据库中的字段设置时间。

我使用的方法如下;

private static Date getCurrentTime() {
    SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-kk:mm:ss.SSS");
    format.setTimeZone(TimeZone.getTimeZone("Europe/London"));

    Calendar cal = Calendar.getInstance();
    Date currentDate = cal.getTime();

    try {
        return format.parse(format.format(currentDate));
    } catch (ParseException e) {
        log.error("Error occured while parsing date-->" + e.getMessage());
    }
    return new Date();
}

private String getStringFromDate(Date date){
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-kk:mm:ss.SSS");
    return sdf.format(date);
}

当消息由生产 unix 框上的 java 应用程序处理时(设置为北美时间,因为它是托管的),那么当它插入数据库时​​,它会落后一个小时(未设置为 BST)。

如果我在桌面上的 Eclipse 中运行相同的代码,我会在数据库中获得正确的时间。

我不确定是什么导致了这个问题,希望有人能提供帮助。

谢谢

编辑*** 乍一看,即使是 unix 盒子上的日志文件也落后了一个小时,所以在此基础上,我假设它的 unix 导致了与我的代码相反的问题。

4

2 回答 2

2

Date实例始终采用UTC(或者,除非您做错了什么,否则应该如此)。您应该将日期以 UTC 格式存储在数据库中,并将它们转换为您在向用户展示时想要的任何时区。其他任何事情都只是自找麻烦。

您在同一 TimeZone 中格式化然后解析 Date 实例的代码毫无意义。

于 2013-07-20T18:58:38.040 回答
0
于 2018-03-28T23:05:41.007 回答