Java 正在分析到目前为止的特定字符串
在通过Selenium读取整个表并将结果写入excel文件的过程中,我目前面临着格式化/解析Java 正在分析到目前为止的特定字符串,java,date,parsing,Java,Date,Parsing,在通过Selenium读取整个表并将结果写入excel文件的过程中,我目前面临着格式化/解析日期对象中的日期字符串的问题。我要归档的是以下格式: dd-mm-yyyy 从表中检索的日期字符串如下所示 2020年4月16日 我试图使用SimpleDateFormat格式化程序,但得到了ParseException java.text.ParseException: Unparseable date: "16 Apr 2020" 执行以下操作 Date date = new Simp
日期
对象中的日期字符串
的问题。我要归档的是以下格式:
dd-mm-yyyy
从表中检索的日期字符串如下所示
2020年4月16日
我试图使用SimpleDateFormat
格式化程序,但得到了ParseException
java.text.ParseException: Unparseable date: "16 Apr 2020"
执行以下操作
Date date = new SimpleDateFormat("dd MMM yyyy").parse("16 aug 2020");
System.out.println(date);
输出
2020年8月16日星期日00:00:00 PDT
出现错误的原因是dd-mm-yyyy
与“2020年8月16日”不匹配
后面没有连字符,月份有三个字母,mm只代表两个,
dd-mm-yyyy
是一种正则表达式,它应该与要解析的字符串相匹配仅用于记录:这是如何使用java.time
解析和格式化当前的日期字符串
(可从java 8获得):
这个的输出是
16-04-2020
您是如何尝试的?你能把密码寄出去吗?提示:您想要的格式有缺陷m
表示分钟,m
表示月。您是否必须使用SimpleDateFormat
和Date
,或者您是否可以决定采用称为java.time
的不太麻烦的方式,您使用的日期时间类很糟糕,多年前被JSR 310中定义的现代java.time类所取代。我认为它应该是三个M。新的SimpleDataFormat(“dd-MMM-yyyy”)
您说得对,谢谢,我用2个M测试它,然后忘了放回去,顺便说一句,2个M的正确答案中有pasing错误,但是我认为我们不应该帮助人们使用早已过时且臭名昭著的SimpleDataFormat类。至少不是第一个选择。而且不是毫无保留的。今天,我们在及其DateTimeFormatter
@OleV.V中有了更好的功能。同意,但我不知道他是否有Java8,我是他的助手,他可能已经知道,他应该在他的电脑上学习时间包own@Eltomon,仅供参考,如果日期不正确,则不会失败。例如,2020年4月31日
将打印2020年4月30日
。如果使用SimpleDataFormat
,则将打印与01-May-2020
@OleV.V相同的值。是的,谢谢。。。在用于解析的格式化程序中使用Locale
更好。
public static void main(String[] args) {
// the date String
String dateString = "16 Apr 2020";
/*
* which is parsed to a LocalDate using a formatter
* with a suitable pattern and a fitting Locale
* (ENGLISH is a good choice because it is language specific,
* you could use a country specific one here as well, like US or UK)
*/
LocalDate ld = LocalDate.parse(dateString,
DateTimeFormatter.ofPattern("dd MMM yyyy", Locale.ENGLISH));
/*
* and which is then printed in a different format
* using a formatter with a different pattern
* (this time no Locale is needed because the format is numeric)
*/
System.out.println(ld.format(DateTimeFormatter.ofPattern("dd-MM-yyyy")));
}