添加额外年份的日期格式转换

时间:2016-04-21 06:44:39

标签: java date

我需要格式化输入日期字符串。

输入日期字符串:28-01-1983(dd-MM-yyyy)

预期日期字符串:1983-01-28 (yyyy-MM-dd)

我使用过以下程序。但我没有得到正确的输出。

public static String formateDate(String oldFormat, String newFormat, String date) {
        final String OLD_FORMAT = oldFormat;
        final String NEW_FORMAT = newFormat;

        String oldDateString = date;
        String newDateString = null;

        try {
            SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT);
            Date d = sdf.parse(oldDateString);
            sdf.applyPattern(NEW_FORMAT);
            newDateString = sdf.format(d);
        } 
        catch (ParseException e) {
            e.printStackTrace();
        }

        return newDateString;
}

通话方式:

public static void main(String[] args) {
        String formatDob = formateDate("MM-dd-yyyy", "yyyy-dd-MM", "28-01-1983");
        System.out.println("Formated DOB:"+formatDob);

}

现在我收到输出:Formated DOB:1985-01-04

为什么我的代码会产生错误的输出?我使用的是JDK 1.7

3 个答案:

答案 0 :(得分:3)

您将以28的旧格式传递月份,其中(12 + 12 + 4)表示即将到来的第三年April个月。

因此,您的旧格式(MM-dd-yyyy)会将日期解析为(1983 + 2 years) = 1985和第三年的4 th April所以您将拥有日期1st April 1985。您的旧日期格式应为dd-MM-yyyy

答案 1 :(得分:0)

考虑转换的第一部分

您的格式为MM-dd-yyyy,日期字符串为28-01-1983

由于没有一个月28,我建议格式应为dd-MM-yyyy

答案 2 :(得分:0)

更改

formateDate("MM-dd-yyyy", "yyyy-dd-MM", "28-01-1983");

formateDate("MM-dd-yyyy", "yyyy-dd-MM", "01-28-1983");

你的日期已经过了一个月。