java - 将字符串转换为日期,几乎完成了!

标签 java date paypal

<分区>

Possible Duplicate:
Converting ISO8601-compliant String to java.util.Date

我正在尝试转换这个字符串:

2011-06-07T14:08:59.697-07:00

对于 Java Date,到目前为止,这是我所做的:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S");
Date date1 = sdf.parse("2011-06-07T14:08:59.697", new java.text.ParsePosition(0));

几乎一切都很好,除了最重要的部分,时区! SimpleDateFormat 的问题是它期望 +/-hhmm 中的时区,而我的是 +/-hh:mm 格式。

此外,我不知道为什么,这有效:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S Z");
Date date1 = sdf.parse("2011-06-07T14:08:59.697 -0700", new java.text.ParsePosition(0));

但这不是(时区前的空格):

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SZ");
Date date1 = sdf.parse("2011-06-07T14:08:59.697-0700", new java.text.ParsePosition(0));

将此日期 2011-06-07T14:08:59.697-07:00 转换为 java 日期的正确格式是什么?

感谢您的帮助!

最佳答案

这看起来像 XML 中使用的 ISO 8601 标准日期和时间格式。不幸的是,Java 的 SimpleDateFormat 无法正确支持该格式,因为它无法处理时区中的冒号。

但是,javax.xml 包中包含可以处理这种格式的类。

String text = "2011-06-07T14:08:59.697-07:00";
XMLGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar(text);

如果您需要它作为 java.util.Calendar,那么您可以在其上调用 toGregorianCalendar():

Calendar c2 = cal.toGregorianCalendar();

当然你可以从中得到一个java.util.Date:

Date date = c2.getTime();

您还可以使用流行的 Joda Time native 支持此格式的库(并且具有比 Java 标准库更好的 API 来处理日期和时间)。

关于java - 将字符串转换为日期,几乎完成了!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6279647/

上一篇:paypal - 哪个支付提供商适合启动电子商务业务 : PayPal or Stripe?

下一篇:wordpress - WooCommerce 支付网关未显示在结帐页面上

相关文章:

java - 我怎样才能在 Play!'s lib 文件夹中排除部分阴影 jar

java - GSS JAAS 无法读取 keystore /选项卡

两个日期之间的Mysql选择不起作用

Paypal 支付退回法规 - 如何处理?

php - Paypal pro 使用存储的信用卡详细信息付款

java - JSF 中的交叉字段验证 h :dataTable

java - 井字棋游戏预测平局(平局)

Django 1.6 按小时和时区过滤问题

php - 在php中转换日期和时间

paypal - Paypal 的DoVoid方法中的权限被拒绝