Java中转换日期格式的问题
我有一个 MMM/dd/yyyy 形式的字符串,即。 2010 年 5 月 21 日。 现在我想将其转换为 yyyyMMdd,即。 20100521。
我的代码是:
public static void main(String[] args) {
ArrayList<String> dates = new ArrayList<String>();
dates.add("Jan/13/2011");
dates.add("Feb/03/2001");
dates.add("Mar/19/2012");
dates.add("Apr/20/2011");
dates.add("May/21/2010");
dates.add("Jun/23/2008");
dates.add("Jul/12/2009");
dates.add("Aug/14/2010");
dates.add("Sep/01/2011");
dates.add("Oct/07/2010");
dates.add("Nov/05/2011");
dates.add("Dec/30/2011");
for(String s : dates) {
System.out.println(transformPrevDate(s));
}
}
转换方法:
public String transformPrevDate(String datoe) {
String[] splitter = datoe.split("/");
String m = splitter[0].toUpperCase();
String d = splitter[1];
String y = splitter[2];
DateFormat formatter = new SimpleDateFormat("MMM");
DateFormat formatter2 = new SimpleDateFormat("MM");
try {
Date date = formatter.parse(m);
m = formatter2.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
String date = y + m + d;
return date;
}
问题是我在五月和十月收到不可解析的日期异常。我来自丹麦,如果我将其更改为丹麦语“Maj”和“Okt”,它就会成功。那么我在这里做错了什么?
I have a string in the form MMM/dd/yyyy, ie. May/21/2010.
Now I want to convert it to yyyyMMdd, ie. 20100521.
My code is:
public static void main(String[] args) {
ArrayList<String> dates = new ArrayList<String>();
dates.add("Jan/13/2011");
dates.add("Feb/03/2001");
dates.add("Mar/19/2012");
dates.add("Apr/20/2011");
dates.add("May/21/2010");
dates.add("Jun/23/2008");
dates.add("Jul/12/2009");
dates.add("Aug/14/2010");
dates.add("Sep/01/2011");
dates.add("Oct/07/2010");
dates.add("Nov/05/2011");
dates.add("Dec/30/2011");
for(String s : dates) {
System.out.println(transformPrevDate(s));
}
}
And the method to transform:
public String transformPrevDate(String datoe) {
String[] splitter = datoe.split("/");
String m = splitter[0].toUpperCase();
String d = splitter[1];
String y = splitter[2];
DateFormat formatter = new SimpleDateFormat("MMM");
DateFormat formatter2 = new SimpleDateFormat("MM");
try {
Date date = formatter.parse(m);
m = formatter2.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
String date = y + m + d;
return date;
}
The problem is that I get an Unparseable date exception, on May and Oct. I'm from Denmark and if I change it to danish "Maj" and "Okt" it succeeds. So what am I doing wrong here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您的
transformDate
方法可以更简单地编写,如下所示:您不需要自己进行解析。
Your
transformDate
method can be much simpler written like this:You don't need to do your parsing yourself.
使用
SimpleDateFormat(String pattern, Locale locale)
将Locale
添加到日期解析中(对于英语,请使用Locale.ENGLISH< /代码>)。
更好的解决方案:
Use
SimpleDateFormat(String pattern, Locale locale)
to addLocale
to your date parsing (for english, useLocale.ENGLISH
).Better solution:
您需要应用 SimpleDateFormat 上的区域设置。
这是一个更短的版本:-
You will need to apply the locale on SimpleDateFormat.
Here's a more shorter version:-
使用SimpleDateFormat(字符串模式,区域设置语言环境);
use
SimpleDateFormat(String pattern, Locale locale)
;SimpleDateFormat
与区域设置相关,默认情况下它使用您自己的区域设置。如果您想使用基于英语的语言环境,可以通过 在创建SimpleDateFormat
时传入Locale
。因此,要使用基于美国的区域设置,请将
SimpleDateFormat
初始化更改为:SimpleDateFormat
is locale-dependent, and it's using your own locale by default. If you would like to use an English-based locale, you can create it by passing in aLocale
when you create yourSimpleDateFormat
.So to use a US-based locale, change your
SimpleDateFormat
initialization to:SimpleDateFormat
使用您的区域设置 - 因此您的计算机可能默认设置为使用丹麦语。明确指定英语区域设置:SimpleDateFormat
uses your locale - so your computer is probably set to use Danish by default. Specify the English Locale explicitly: