Java/Groovy - 日期格式简单重排

59

我是Java/Groovy开发的新手,我有一个简单的字符串想要重新格式化,但是当我尝试运行以下代码时,出现了'Unparseable date'错误:

import java.text.SimpleDateFormat 
import java.util.Date

String oldDate
Date date
String newDate 

oldDate = '04-DEC-2012'
date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(oldDate)
newDate = new SimpleDateFormat("M-d-yyyy").format(date) 

println newDate

我确定这是件简单的事,但解决方法却让我束手无策。 有人可以帮忙吗?


1
你的日期是以“DD-MMM-YYYY”格式给出的,而你正在尝试解析其他内容... - posdef
重复的 http://stackoverflow.com/questions/11135675/unparseable-date-30-jun-12 - CAMOBAP
对于不了解Groovy的新读者,我强烈建议您不要使用SimpleDateFormatDate。这些类设计不佳且过时已久,前者尤其麻烦。相反,请使用来自java.time,现代Java日期和时间APILocalDateDateTimeFormatterBuilderDateTimeFormatter。请参见user7605325的此答案 - Ole V.V.
4个回答

94

使用Groovy,您不需要包含文件,可以直接执行以下操作:

String oldDate = '04-DEC-2012'
Date date = Date.parse( 'dd-MMM-yyyy', oldDate )
String newDate = date.format( 'M-d-yyyy' )

println newDate

打印:

12-4-2012

2
@Andreas 七年后,链接为http://docs.groovy-lang.org/docs/groovy-2.4.4/html/groovy-jdk/java/util/Date.html#parse(java.lang.String,%20java.lang.String)。 - tim_yates

4
你的DateFormat格式不匹配你输入的日期String。你可以使用以下方法:
new SimpleDateFormat("dd-MMM-yyyy")

1

oldDate 不符合您正在使用的 SimpleDateFormat 的格式。

尝试使用这个格式:dd-MMM-yyyy - 它与您要解析的内容匹配。


1
//Groovy Script

import java.util.Date   
import java.util.TimeZone   
tz = TimeZone.getTimeZone("America/Sao_Paulo")   
def date = new Date()   
def dt = date.format("yyyy-MM-dd HH:mm:ss", timezone=tz)   
println dt //formatado   
println date // formatado porém, horario do Sistema em GMT.

3
感谢您想要做出贡献。我强烈建议您不要使用 DateTimeZone 类,因为它们的设计较差且过时了。相反,请使用 java.time,现代Java日期和时间API 中的类。另外,非常重要的是,您的回答如何回答问题?我认为问题是关于将格式如 04-DEC-2012 转换为 12-4-2012 的重新格式化方法。 - Ole V.V.
@OleV.V. 用java.time如何解决OP的问题?你有例子吗? - philler82
在Java中:使用我在这里的答案解析来自问题的oldDate,只需要模式为“dd-MMM-uuuu”(四位数年份)。要将那个答案中的LocalDate格式化为“12-4-2012”,请使用date.format(DateTimeFormatter.ofPattern("M-d-u")) - Ole V.V.
嗨@OleV.V.,我确实错误地描述了我的答案,感谢您的建议。 - Ediney Andrade

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接