【问题标题】:How to convert PostgreSQL timestamp with time zone to DateTime?如何将带有时区的 PostgreSQL 时间戳转换为 DateTime?
【发布时间】:2014-01-25 04:30:09
【问题描述】:

这是我在申请中得到的日期:

String psqlDate = "2013-11-17 14:08:33+01";

psqlDate 转换为joda DateTime 的最佳方法是什么?

[编辑]

我可以使用DateTime parse 方法。它适用于时间戳,它使用 T - 2013-11-17T14:08:33+01 拆分了有关日期和时间的信息。

这应该适用于良好的模式:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd...");
DateTime dt = DateTime.parse((String) obj, formatter);

PostgreSQL 时间戳与时区的正确模式是什么?

【问题讨论】:

  • 惊讶于您的代码在日期看到 String,而不是 java.sql.Date。你是如何从数据库中获取这个的?
  • 换句话说,为什么不把SELECT 作为date 放在首位呢?然后就可以从java.sql.Date/java.util.Date使用JodaTime的转换例程了。
  • 我没有直接从 PostgreSQL 获取数据。我从 Kafka 获取 JSON 格式的数据。

标签: java postgresql timestamp jodatime


【解决方案1】:

这是一个真正的 Joda 答案。您是否尝试过 org.joda.time.format.DateTimeFormat 中的以下模式?

"yyyy-MM-dd HH:mm:ssZ"

我看到您的时区偏移量仅以小时而不是分钟指定。所以也许你需要像这样简单的预处理和双 Z:

String psqlDate = "2013-11-17 14:08:33+01";
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ssZZ");
DateTime dt = DateTime.parse(psqlDate + ":00", formatter);

【讨论】:

    【解决方案2】:

    你可以试试这个

        String psqlDate = "2013-11-17 14:08:33+01";
        Date date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss'+'01").parse(psqlDate);
        System.out.println(date);
    

    输出:

        Sun Nov 17 14:08:33 IST 2013
    

    【讨论】:

    • 获取时区信息的正确模式是什么?
    【解决方案3】:

    using the SimpleDateFormat 就像是: SimpleDateFormat("yyyy/mm/dd HH:mm:ss").parse() 将其转换为 java date 对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2018-12-18
      • 1970-01-01
      • 2019-10-07
      • 2020-10-17
      • 1970-01-01
      • 2021-09-22
      相关资源
      最近更新 更多