我有一个MMM / dd / yyyy形式的字符串,即。月/ 21/2010 现在我想将它转换为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;
}
问题是我在5月和10月获得了一个Unparseable日期例外。我来自丹麦,如果我将其改为丹麦语“Maj”和“Okt”,它就会成功。那么我在这里做错了什么?
答案 0 :(得分:4)
您的transformDate
方法可以更简单地编写如下:
DateFormat input = new SimpleDateFormat("MMM/dd/yyyy", Locale.ENGLISH);
DateFormat output = new SimpleDateFormat("yyyyMMdd");
public String transformPrevDate(String datoe) throws ParseException {
return output.format(input.parse(datoe));
}
您不需要自己进行解析。
答案 1 :(得分:2)
您需要申请the locale on SimpleDateFormat。
这是一个更短的版本: -
public String transformPrevDate(String date) {
DateFormat oldFormat = new SimpleDateFormat("MMM/dd/yyyy", Locale.ENGLISH);
DateFormat newFormat = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH);
String formattedDate = "";
try {
formattedDate = newFormat.format(oldFormat.parse(date));
}
catch (ParseException e) {
e.printStackTrace();
}
return formattedDate;
}
@Test
public void testTransformPrevDate() {
assertEquals("20110113", transformPrevDate("Jan/13/2011"));
assertEquals("20010203", transformPrevDate("Feb/03/2001"));
}
答案 2 :(得分:2)
使用SimpleDateFormat(String pattern, Locale locale)
将Locale
添加到您的日期解析中(对于英语,请使用Locale.ENGLISH
)。
更好的解决方案:
public String transformPrevDate(String datoe) {
SimpleDateFormat dateFormat = new SimpleDateFormat("MMM/dd/yyyy", Locale.ENGLISH);
SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyyMMdd");
try {
return dateFormat2.format(dateFormat.parse(datoe));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 3 :(得分:1)
使用SimpleDateFormat(String pattern, Locale locale)
;
答案 4 :(得分:1)
SimpleDateFormat
依赖于语言环境,默认情况下它使用您自己的语言环境。如果您想使用基于英语的区域设置,可以按passing in a Locale
when you create your SimpleDateFormat
创建。
因此,要使用基于美国的区域设置,请将SimpleDateFormat
初始化更改为:
DateFormat formatter = new SimpleDateFormat("MMM", Locale.US);
DateFormat formatter2 = new SimpleDateFormat("MM", Locale.US);
答案 5 :(得分:0)
SimpleDateFormat
使用您的语言环境 - 因此您的计算机可能默认设置为使用丹麦语。明确指定英语区域设置:
DateFormat formatter = new SimpleDateFormat("MMM", Locale.ENGLISH);