我有一个格式为 MMDDYYYY(例如 01062014)的字符串,我希望将其转换为 2014 年 1 月 6 日之类的内容。我当前的代码不起作用并返回默认月份(出了问题)然后是 10、6204。
String[] datesRaw = args[3].split("");
String[] dates = { datesRaw[0] + datesRaw[1], datesRaw[2] + datesRaw[3], datesRaw[4] + datesRaw[5] + datesRaw[6] + datesRaw[7] };
int[] numbers = new int[dates.length];
for (int i = 0; i < dates.length; i++) {
numbers[i] = Integer.parseInt(dates[i]);
}
String month = "Something whent wrong";
switch (numbers[0]) {
case 1:
month = "January";
break;
case 2:
month = "February";
break;
case 3:
month = "March";
break;
case 4:
month = "April";
break;
case 5:
month = "May";
break;
case 6:
month = "June";
break;
case 7:
month = "July";
break;
case 8:
month = "August";
break;
case 9:
month = "September";
break;
case 10:
month = "October";
break;
case 11:
month = "November";
break;
case 12:
month = "December";
break;
}
fileName = month + " " + dates[1] + ", " + dates[2];
使用两个
SimpleDateFormat
对象 - 一个将初始 String
解析为 Date
,另一个将生成的 Date
格式化为 String
。
public String convert(String inputString) {
SimpleDateFormat inputFormat = new SimpleDateFormat("MMddyyyy");
SimpleDateFormat outputFormat = new SimpleDateFormat("MMMM d, yyyy");
Date theDate = inputFormat.parse(inputString);
return outputFormat.format(theDate);
}
您可能希望在具有此方法的类中创建这两个
SimpleDateFormat
对象作为常量,但请注意,这种方法会使该方法变得不线程安全。
您采用的方式不是正确的方式。最好将数字字符串转换为 Date 对象,然后使用打印格式打印。
这个答案可以帮助你
String date = "01062014";
DateFormat ft = new SimpleDateFormat("MMddyyyy");
DateFormat ft1 = new SimpleDateFormat("MMMM dd, yyyy");
System.out.println(ft1.format((Date)ft.parse(date)));
在现代 Java 中,使用 java.time 类进行日期时间处理。无需推出自己的解决方案。
java.time.LocalDate
对象。该类表示仅日期值,没有时间,没有时区。
DateTimeFormatter
定义与您的输入相匹配的格式模式。
// format of MMDDYYYY (ex. 01062014
String input = "01062014";
DateTimeFormatter formatterParsing = DateTimeFormatter.ofPattern ( "MMdduuuu" );
LocalDate ld = LocalDate.parse ( input , formatterParsing );
ld.toString() = 2014-01-06
DateTimeFormatter
类是线程安全的。因此,您可以在类中保留一个 static
实例以供重复使用,甚至可以跨线程使用。
使用另一个
DateTimeFormatter
对象生成文本。
让 java.time 在可行时自动对您进行本地化。指定
Locale
以确定本地化中使用的人类语言和文化规范。
// something like January 6, 2014
Locale locale = Locale.of ( "en" , "US" ); // English language, United States cultural norms.
DateTimeFormatter formatterGenerating = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG );
String output = ld.format ( formatterGenerating );
2014 年 1 月 6 日