如何使用SimpleDateFormat格式化日期

时间:2015-02-19 21:03:29

标签: java simpledateformat

我无法格式化日期。  dateFormat.format()接受Date作为参数。所以我创建了一个新的Date()

它说下面的Date()方法已被弃用,我在运行时得到以下异常。

异常:

Exception in thread "main" java.lang.IllegalArgumentException at
java.util.Date.parse(Date.java:598)


public class MyDate {
    public static void main(String[] args) {


        Date date = new Date("2012-02-16T00:00:00.000-0500");

        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "dd-MMM-yyyy HH:mm:ss");
        String stringDate = dateFormat.format(date);

        System.out.println(stringDate); // how do I test this conversion??

    }
}

我的数据库格式为日期 - 2012-02-16T00:00:00.000-0500 我需要将其转换为格式的字符串:dd-MMM-yyyy HH:mm:ss

我正在使用Java6

2 个答案:

答案 0 :(得分:4)

感谢@Andy Brown。除了Andy Brown所回答的问题之外,我还发布了完整的代码片段

完整解决方案:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SampleDate {
    public static void main(String[] args) throws ParseException {
        DateFormat parseFormat = new SimpleDateFormat(
                 "yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        Date date = parseFormat.parse("2012-03-16T00:00:00.000-0500");
        String strDate = parseFormat.format(date);
        System.out.println(strDate);

        // if you get date of type 'java.sql.Date' directly from database cursor like
         //rs.getDate("created_date"), just pass it directly to format()

        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "dd-MMM-yyyy HH:mm:ss");
        String stringDate = dateFormat.format(date);
        System.out.println(stringDate);

    }
}

/*
Output:

2012-03-16T01:00:00.000-0400
16-Mar-2012 01:00:00

*/

您也可以将此java.util.Date转换为java.sql.Date

String dateString = "03-11-2012";
    SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");
    java.util.Date date = dateFormat.parse(dateString);
    java.sql.Date sqlDate = new Date(date.getTime());
// set the input param type as OracleTypes.DATE and pass the input param date as sqlDate

答案 1 :(得分:2)

如果您想阅读日期“2012-02-16T00:00:00.000-0500”,您应该使用SimpleDateFormatparse,如下所示:

DateFormat parseFormat = new SimpleDateFormat(
        "yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date date = parseFormat.parse("2012-02-16T00:00:00.000-0500");

与其他代码一起写道:

16-Feb-2012 05:00:00

解析格式模式字母列在SimpleDateFormat documentation中。 T使用撇号进行转义。

这个答案假设是Java 7,或者您将使用Java 8中的新date & time API