我们有一个库,用户可以以多种格式传入日期。它们遵循ISO,但有时会缩写。
或者更好的是,是否有某种方法可以解析一个字符串,并且如果字符串对任何日期[时间]都有意义,它会尝试一切可能的方法并返回一个时态对象?
如果没有一个完整的规范,就很难给出一个精确的建议。通常用于可变格式的技术包括:
DateTimeFormatterBuilder.ParseDefaulting()
查找分析字符串中可能不存在的部分。parsebest
.我假设y-M-d总是按照这个顺序出现(例如,从来不是M-d-y或d-M-y)。19-3-12
与ISO 8601冲突,因为该标准要求(至少)4位年和2位月。一个2位数年份的挑战是猜测世纪:这是1919年还是2019年,或者可能是2119年?
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("[uuuu][uu]-M-d")
.optionalStart()
.appendLiteral('T')
.append(DateTimeFormatter.ISO_LOCAL_TIME)
.optionalEnd()
.toFormatter();
TemporalAccessor dt = formatter.parseBest("19-3-12", LocalDateTime::from, LocalDate::from);
System.out.println(dt.getClass());
System.out.println(dt);
class java.time.LocalDate
2019-03-12
我认为它应该与您描述的格式的变化一起工作。让我们试试另一个例子:
dt = formatter.parseBest( "2019-03-12T13:12:45.1234", LocalDateTime::from, LocalDate::from);
System.out.println(dt.getClass());
System.out.println(dt);
class java.time.LocalDateTime
2019-03-12T13:12:45.123400
要控制2位数年份的解释,可以使用DateTimeFormatterBuilder.AppendValuerEduced()
的重载变体之一。我建议你考虑在它上面进行范围检查。
解释器模式 解释器模式虽然听上去有些费解,但是如果用示例说明一下就不难理解了。我们知道在C语言中,关于变量的定义是这样的:一个不以数字开始的由字母、数字和下划线构成的字符串。这种形式的表达式可以用状态自动机解决,当然也可以用解释器的方式解决。 typedef struct _Interpret { int type; void* (*process)(void* pDa
面试高频题1: 题目:抖音的盈利模式 答案解析: 1. B2B 收入 抖音利用网红和品牌合作的伙伴关系盈利 2. 品牌滤镜 在抖音上,用户可以给短视频添加滤镜。一些品牌可能会为用户添加专属滤镜,让用户把品牌添加到他们的视频里面。然后,他们可能会请网红主播用这个滤镜拍摄短视频,其他用户看到之后就会跟着使用。一些品牌方可能会造势和滤镜搭配宣传。 在抖音上,用户可以创建音频并上传到平台供其他人使用。这个
使用DateTimeFormatter仅解析LocalTime变量的“Time of Day”时出现问题。尝试了几种不同的格式,但没有看到我缺少了什么(我在想,既然我使用了DateTimeFormatter,我就需要一个date组件,但我只使用了LocalDate就没问题了,而且文档说它支持LocalTime)。 提前感谢任何帮助/链接,以确定我的错误导致异常。 使用此SSCCE复制: ...我得
我试图上传一个图像到内存使用multer,然后处理它与夏普和保存到磁盘。当我尝试在我的中间件中做多个module.exports时。 错误是: TypeError FileUpload.Single不是函数 到目前为止的路线是: 当我刚刚有下面的路由之前,尝试添加图像处理,我没有得到一个错误;
问题内容: 我正在尝试使用下面的确切结构来解析JSON文件。 我正在使用以下jQuery函数: 我做错什么了吗? 问题答案: 您没有访问正确的元素。不指向,它指向最外面的元素(是它的属性)。该数组包含在: 进一步说明: 如果仅访问属性一次,则无需创建局部变量(但当然,它可能更易读)。 虽然连续使用分号是没有错的,但这是不必要和令人困惑的(至少这使我感到困惑;)
问题内容: 我正在使用以下时间戳格式: 以下方法可以正常工作: 而且,当我使用该格式字符串传递时间戳时,它返回,例如: 然后,我需要再次从该字符串映射到时间戳,本质上是相反的操作。我知道我可以使用和及其方法,但是如果可能的话,我宁愿坚持使用样式格式。 我写了这段代码(相当hacky),它适用于某些格式,但不适用于特定格式: 在第二部分,它失败了。 堆栈跟踪: 有没有一种更简单的方法可以在不利用我的