使用TimeZone格式化字符串日期

时间:2012-10-31 09:48:37

标签: parsing date groovy timezone format

我对Groovy很新(但已经爱上了它)。我不是新编码,但到目前为止还没有多少经验。

我在做什么? 我从excel文件中提取某些信息,以便从中创建XML(SOAP)消息,以将其转发到Web服务。到目前为止一切正常除了日期转换

我将字符串日期保存到var

odate = 'Wed Oct 31 00:00:00 CET 2012' 

我需要将此Date重新格式化为类似

的内容
  

“10/31/2012 10:09:00”(MM / dd / yyyy HH:mm:ss)

我试图将日期解析为mentioned in another question,但我得到的只是一个例外。

String odate = 'Wed Oct 31 00:00:00 CET 2012'
def parsedodate = new Date().parse('E MMM dd H:m:s z yyyy', odate)

println parsedodate.format('MM/dd/yyyy h:m:s')
  

抛出异常   31.10.2012 10:18:25 org.codehaus.groovy.runtime.StackTraceUtils sanitize

     

WARNUNG:清理堆栈跟踪:

     

java.text.ParseException:Unparseable date:“Wed Oct 31 00:00:00 CET 2012”


现在经过一番阅读和一些试验和错误我发现,解析方法似乎只能解释德国日期。手动将字符串日期更改为德语格式(我就是这样)后,以下工作。

String odate = 'Mi Okt 31 00:00:00 2012' //Mi = Wednesday, Okt = October, removed timezone
def parsedodate  = new Date().parse('E MMM dd H:m:s yyyy', odate) // removed the z
println parsedodate .format('MM/dd/yyyy h:m:s')

但是,我需要解析器接受英文日期格式。 我该怎么办(错误)?

2 个答案:

答案 0 :(得分:1)

您需要使用一些Java来访问Locale感知的SimpleDateFormat实例。

SimpleDateFormat englishDateFormat = new SimpleDateFormat( englishPattern , Locale.ENGLISH);
SimpleDateFormat germanDateFormat = new SimpleDateFormat( germanPattern , Locale.GERMAN);

Date englishDate = englishDateFormat.parse( odate );
Date germanDate = germanDateFormat.parse( odate );

String englishOutput = englishDate .format( englishPattern );
String germanOutput = germanDate .format( germanPattern );

答案 1 :(得分:1)

针对您的问题的整个groovy解决方案将是:

import java.text.SimpleDateFormat
odate="Wed Oct 31 00:00:00 CET 2012"

englishPattern="E MMM dd H:m:s z yyyy"

SimpleDateFormat englishDateFormat = new SimpleDateFormat( englishPattern , Locale.ENGLISH);
//SimpleDateFormat germanDateFormat = new SimpleDateFormat( germanPattern , Locale.GERMAN);

Date englishDate = englishDateFormat.parse( odate );
//Date germanDate = germanDateFormat.parse( odate );

String englishOutput = englishDate .format( englishPattern );
//String germanOutput = germanDate .format( germanPattern );

englishDate.format("MM/dd/yyyy hh:mm:ss")