DateFormat转换问题在java中? [英] DateFormat conversion problem in java?

查看:107
本文介绍了DateFormat转换问题在java中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的输入字符串是:2010-03-24T17:28:50.000Z



输出模式就像:

  DateFormat formatter1 = new SimpleDateFormat(EEE。MMM。d。yyyy); 

我这样转换:

  formatter1.format(new Date(2010-03-24T17:28:50.000Z)); // illegalArgumentException这里的字符串2010-03-24T17:28:50.000Z

ouput应该是这样的:Thu. 2010年3月24日的想法



但我得到一个 illegalArgumentException 。不知道为什么任何想法?



stacktrace消息是:

  04-08 19:50:28.326:WARN / System.err(306):java.lang.IllegalArgumentException 
04-08 19:50:28.345:WARN / System.err(306):在java.util.Date.parse (Date.java:447)
04-08 19:50:28.355:WARN / System.err(306):在java.util.Date。< init>(Date.java:157)
04-08 19:50:28.366:WARN / System.err(306):at com.example.brown.Bru_Tube $ SelectDataTask.doInBackground(Bru_Tube.java:222)
04-08 19:50:28.366 :WARN / System.err(306):at com.example.brown.Bru_Tube $ SelectDataTask.doInBackground(Bru_Tube.java:1)
04-08 19:50:28.405:WARN / System.err(306) :at android.os.AsyncTask $ 2.call(AsyncTask.java:185)
04-08 19:50:28.415:WARN / System.err(306):at java.util.concurrent.FutureTask $ Sync。 innerRun(FutureTask.java:305)
04-08 19:50:28.415:WARN / System.err(306):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-08 19:50:28.446:WARN / System.err(306):在java.util.c oncurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
04-08 19:50:28.456:WARN / System.err(306):at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java :561)
04-08 19:50:28.466:WARN / System.err(306):在java.lang.Thread.run(Thread.java:1096)


解决方案

问题在于这一部分:



<$日期(2010-03-24T17:28:50.000Z)

显然它不接受这种格式的日期/时间。



您不应该使用该构造函数 - 创建一个适当的格式化程序来解析特定的格式,然后解析它。



或者,使用 Joda时间开始,并避免完全使用 DateFormat 。我不知道你是否可以从Android中使用Joda Time,记住你的数量是相当大的。



编辑:明确地说出来:

  String inputText =2010-03-24T17:28:50.000Z; 
//由于某些原因,Z出现不受支持
DateFormat inputFormat = new SimpleDateFormat(yyyy-MM-dd'T'HH:mm:ss.SSS'Z);
inputFormat.setTimeZone(TimeZone.getTimeZone(UTC));
DateFormat outputFormat = new SimpleDateFormat(EEE。MMM。d。yyyy);
Date parsed = inputFormat.parse(inputText);
String outputText = outputFormat.format(parsed);

//输出是星期三2010年3月24日我的盒子


my input String is : 2010-03-24T17:28:50.000Z

output pattern is like:

DateFormat formatter1 = new SimpleDateFormat("EEE. MMM. d. yyyy");

i convert this like this:

formatter1.format(new Date("2010-03-24T17:28:50.000Z"));//illegalArgumentException here the string "2010-03-24T17:28:50.000Z"

ouput should be like this: Thu. Mar. 24. 2010 idea

but i get a illegalArgumentException. Dont know why? any idea??

stacktrace message is:

04-08 19:50:28.326: WARN/System.err(306): java.lang.IllegalArgumentException
04-08 19:50:28.345: WARN/System.err(306):     at java.util.Date.parse(Date.java:447)
04-08 19:50:28.355: WARN/System.err(306):     at java.util.Date.<init>(Date.java:157)
04-08 19:50:28.366: WARN/System.err(306):     at com.example.brown.Bru_Tube$SelectDataTask.doInBackground(Bru_Tube.java:222)
04-08 19:50:28.366: WARN/System.err(306):     at com.example.brown.Bru_Tube$SelectDataTask.doInBackground(Bru_Tube.java:1)
04-08 19:50:28.405: WARN/System.err(306):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
04-08 19:50:28.415: WARN/System.err(306):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-08 19:50:28.415: WARN/System.err(306):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-08 19:50:28.446: WARN/System.err(306):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
04-08 19:50:28.456: WARN/System.err(306):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
04-08 19:50:28.466: WARN/System.err(306):     at java.lang.Thread.run(Thread.java:1096)

解决方案

The problem is in this part:

new Date("2010-03-24T17:28:50.000Z")

Apparently it doesn't accept dates/times in that format.

You shouldn't be using that constructor anyway - create an appropriate formatter to parse that particular format, and then parse it with that.

Alternatively, use Joda Time to start with, and avoid using DateFormat completely. I don't know if you can use Joda Time from Android, mind you... and it's fairly large.

EDIT: To spell it out explicitly:

String inputText = "2010-03-24T17:28:50.000Z";
// "Z" appears not to be supported for some reason.
DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
inputFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
DateFormat outputFormat = new SimpleDateFormat("EEE. MMM. d. yyyy");
Date parsed = inputFormat.parse(inputText);
String outputText = outputFormat.format(parsed);

// Output is Wed. Mar. 24 2010 on my box

这篇关于DateFormat转换问题在java中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆