从 MMDDYYYY 转换为 date java

问题描述 投票:0回答:4

我有一个格式为 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];
java
4个回答
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
对象作为常量,但请注意,这种方法会使该方法变得不线程安全。


0
投票

您采用的方式不是正确的方式。最好将数字字符串转换为 Date 对象,然后使用打印格式打印。

这个答案可以帮助你


0
投票
String date = "01062014";
DateFormat ft = new SimpleDateFormat("MMddyyyy");
DateFormat ft1 = new SimpleDateFormat("MMMM dd, yyyy");


System.out.println(ft1.format((Date)ft.parse(date)));

0
投票

java.time

在现代 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 日

© www.soinside.com 2019 - 2024. All rights reserved.