我正在尝试使用Date
将String
格式化为SimpleDateFormat
,而使用的模式就是这个
“YYYY-MM-dd'T'HH:MM:ss.SSSxxx”
但到达此行时
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSxxx");
我得到以下例外:
java.lang.IllegalArgumentException:未知的模式字符'x'at java.text.SimpleDateFormat.validatePatternCharacter(SimpleDateFormat.java:323) 在 java.text.SimpleDateFormat.validatePattern(SimpleDateFormat.java:312) 在java.text.SimpleDateFormat。(SimpleDateFormat.java:365)at java.text.SimpleDateFormat中。(SimpleDateFormat.java:258)
我想要实现的格式是 “的 2017-06-16T12:19:59.001 + 02:00 ”
根据documentation这种模式应该有效 怎么了?
修改 为了澄清,我尝试使用xxx和XXX
如果是XXX,我会得到java.lang.IllegalArgumentException:未知的模式字符'X'
答案 0 :(得分:15)
不幸的是,关于大写X
,文档[在问题和答案时]是错误的。由于documentation似乎有关于x
和X
的{{3}},我现在就在这里说明,X
(大写)支持(从API级别1开始),但根本没有提到x
(小写)。 changed significantly也未提及X
。
对docs used to的检查(请参阅validateFormat())显示该版本中只识别字母GyMdkHmsSEDFwWahKzZLc
,尽管文档声称自API以来X
已得到支持级别1.这解释了为什么你得到IllegalArgumentException: Unknown pattern character 'X'
。
有关历史详情,请参阅Android source code。
同时,您必须找到一种解决方法,具体取决于您需要解析的输入类型。例如。 this bug report
文档有the OP's answer添加“支持(API级别)”列,表示仅从API级别24开始支持X
。可能是OP的IllegalArgumentException
到期了在24之前的设备上测试应用程序,因为之前的文档没有提及任何支持的API级别。
答案 1 :(得分:11)
我相信我在issue at GitHub中找到了答案:
你是对的,Android使用
aws-cli
代替生成时区ZZZZZ
(如Java中的+01:00
)。目前,您是否可以尝试使用XXX
方法自定义日期时间格式 让它在Android中运行?以petstore样本为例:
ApiClient#setDatetimeFormat
显然,我必须使用:
// import io.swagger.client.Configuration;
// import io.swagger.client.ApiClient;
// import java.text.SimpleDateFormat;
// Customize for the default ApiClient
Configuration.getDefaultApiClient().setDatetimeFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"));
// Customize for a new ApiClient
ApiClient apiClient = new ApiClient();
apiClient.setDatetimeFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"));
// Use the new ApiClient
PetApi api = new PetApi(apiClient);
api.getPetById(new Long(1));
答案 2 :(得分:0)
您需要的模式是"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
,但它在异常中提到了小写x
。看起来你某处有拼写错误。
答案 3 :(得分:-1)
我认为您正在寻找“yyyy-MM-dd'T'HH:mm:ss.SSSZ”
将日期格式更改为
DateFormat df = new SimpleDateFormat(“yyyy-MM-dd'T'HH:mm:ss.SSS”); 或
DateFormat df = new SimpleDateFormat(“yyyy-MM-dd'T'HH:mm:ssZ”);
这可能会对你有所帮助