java - 如何将不同时区的日期字符串转换为一个时区中的日期对象

标签 java date timezone

我正在开发 RSS 阅读器软件。我获取其 pubDate(发布日期)值作为字符串的项目,将它们转换为 Date 对象,然后将它们放入我的数据库中。然而,当我检查数据库时,我看到了一些有趣的值,例如明天的日期。

我研究了这种情况,发现它与时区值Z有关。例如,当我得到“Mon, 26 May 2014 21:24:29 -0500”时,它变成“2014-05-27 05:24: 29”,第二天!

我想要的只是获取任何时区的日期并将其转换为公共(public)时区的日期,例如我所在国家/地区的日期。

这是我的代码:

 public static String convert(String datestr) throws ParseException {
    DateFormat formatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
    Date date = formatter.parse(datestr);

    SimpleDateFormat resultFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    return  resultFormatter.format(date);
}

我使用这样的方法:

 System.out.println(convert("Mon, 26 May 2014 21:24:29 -0500"));

输出为:2014-05-27 05:24:29

有什么想法吗?

最佳答案

由于您尚未设置时区,因此它使用系统的默认时区。

设置特定的IANA time zone .

SimpleDateFormat resultFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
resultFormatter.setTimeZone(TimeZone.getTimeZone("America/New_York"));
return resultFormatter.format(date);

关于java - 如何将不同时区的日期字符串转换为一个时区中的日期对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23898855/

相关文章:

javascript - 如何在javascript中很好地显示用户的时区信息

java - RxJava 出错后如何继续流式传输项目?

java - 为什么在Java中查询一个日期BC改成AD?

java - 如何将日期设置为韩国或其他任何地方的当天?

amazon-web-services - CASE 语句中的 Amazon Redshift dateadd()

javascript - 将 Windows 时区转换为 moment.js 时区?

linux - 获取时区日期命令行linux

java - 禁用 PointLight 会引发 CapabilityNotSetException

Java集测试

java - 如何检查 date 中的变量是否比当前日期早 10 秒