如何将带时区的PostgreSQL时间戳转换为DateTime?

4

这是我在应用程序中获得的日期:

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

最佳方法将psqlDate转换为joda DateTime是什么?
[编辑]
我可以使用DateTime解析方法。它适用于具有带有T的日期和时间信息的时间戳 - 2013-11-17T14:08:33+01
这应该使用良好的模式工作:
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd...");
DateTime dt = DateTime.parse((String) obj, formatter);

如何正确地格式化带时区的 PostgreSQL 时间戳?


1
你的代码看到的是一个String类型的日期,而不是java.sql.Date类型的。你是如何从数据库中获取这个值的? - Craig Ringer
换句话说,为什么不一开始就将其作为日期进行选择呢?然后您可以使用JodaTime的转换例程从java.sql.Date / java.util.Date进行转换。 - Craig Ringer
1
我并不直接从PostgreSQL获取数据。我从Kafka以JSON格式获取数据。 - Lukas Hajdu
3个回答

5

这里是一个真正的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

获取时区信息的正确模式是什么? - Lukas Hajdu

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接