我有以下两个日期:
我正在使用Jackson将日期从rest api转换为joda Datetime。
我以为模式“dd MMM.yyyy”可以工作,但“may”没有点,所以在那一点上崩溃了。
有没有解决方案,或者我必须自己编写datetime解析器?
jackson中的注释是:
@JsonFormat(pattern = "dd MMM. yyyy", timezone = "UTC", locale = "US", )
@JsonProperty(value = "date")
private DateTime date;
所以只允许有一种约会模式。
还有一种不同的方法是修复用于解析的字符串:
String date = "13 May. 2009";
DateTime result = DateTime.parse(date.replace(".",""),
DateTimeFormat.forPattern("dd MMM yyyy"));
如果字符串中有点,可以定义两个格式化程序并使用带点的格式化程序。
String dateString = "8 Oct. 2009";
DateTimeFormatter formatWithDot = DateTimeFormat.forPattern("dd MMM. yyyy");
DateTimeFormatter formatWithoutDot = DateTimeFormat.forPattern("dd MMM yyyy");
DateTime date = dateString.indexOf('.') > -1
? formatWithDot.parseDateTime(dateString)
: formatWithoutDot.parseDateTime(dateString);
鉴于OP的新评论和要求,解决方案是使用自定义反序列化器:
你可以这样做:
@JsonDeserialize(using = MyDateDeserializer.class)
class MyClassThatHasDateField {...}
请参见此处的教程:http://www.baeldung.com/jackson-deserialization
这里有一个例子:使用Jackson进行自定义JSON反序列化
旧答案:
您可以使用Java的SimpleDataFormat
,并且:
例子:
String[] formats = { "dd MMM. yyyy", "dd MM yyyy" };
for (String format : formats)
{
try
{
return new SimpleDateFormat( format ).parse( theDateString );
}
catch (ParseException e) {}
}
或
String[] formats = { "dd MMM. yyyy", "dd MM yyyy" };
String[] patterns = { "\\d+ [a-zA-Z]+\. \d{4}", "\\d+ [a-zA-Z]+ \d{4}" };
for ( int i = 0; i < patterns.length; i++ )
{
// Create a Pattern object
Pattern r = Pattern.compile(patterns[ i ] );
// Now create matcher object.
Matcher m = r.matcher( theDateString );
if (m.find( )) {
return new SimpleDateFormat( formats[ i ] ).parse( theDateString );
}
}
我有格式为“2020/02/25 23:58:08”的日期字符串。我想把它解析为‘2020-02-25’。 注意:最初的日期是字符串格式,转换后无论是日期格式还是字符串格式都无关紧要。 文件js公司 当我运行这个程序时,我得到了未捕获的引用错误:gi未定义,gi是全局替换
这是一个示例文档 我数到50999 当我为匹配条件添加日期字段时,如下所示,我没有得到任何值。 DBObject火柴=new BasicDBObject();match.put("data.type","score.type");match.put("body.name", new BasicDBObject("$存在",1));match.put("时间戳","2014-09-03T22:07:
这是一个很难回答的问题: 如何在没有外部库的情况下解析< code >“YYYYmmdd”格式的日期?如果输入字符串不是这种格式,我希望得到< code>invalid Date(或者undefined,如果这样更简单的话)。
如何将“2021 11月20日01:00”格式的日期解析为分区日期时间?我试着这样做: 但是得到了这个奇怪的错误: Java语言时间总体安排DateTimeParseException:无法解析文本“2021 11月20日01:00”:无法从TemporalAccessor获取ZonedDateTime:{OffsetSeconds=3600},ISO解析为java类型的2021 11月20日。时
我有个问题。我试图将包含日期的字符串解析为另一种日期格式。代码: 错误消息: 请帮助。:)