如何使用SimpleDateFormat转换日期?

时间:2013-06-24 11:37:24

标签: java mysql hibernate date

在我的Java应用程序中,我使用的是Mysql,它的格式为yyyy-MM-dd hh:mm:ss。虽然我需要dd-MM-yyyy hh:mm a格式。转换确实发生在Hibernate VO类中。

为此,我这样做:

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "CREATED_DATE")
private Date createdDate = new Date();

public Date getCreatedDate() {
    Date date = null;
    try {
        date = new SimpleDateFormat("dd/MM/yyyy hh-mm a")
                .parse(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(createdDate));
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return date;
}

public void setCreatedDate(Date createdDate) {
    this.createdDate = createdDate;
}

但它确实给出了Parse异常。

java.text.ParseException: Unparseable date: "2013-05-06 01:39:00"
    at java.text.DateFormat.parse(DateFormat.java:354)
    at com.sits.ec.valueObjects.MessageBoxVO.getCreatedDate(MessageBoxVO.java:64)

有人可以给我一个建议吗?

7 个答案:

答案 0 :(得分:1)

尝试:

import java.util.*;
import java.text.*;

public class Example {
    public static void main(String[] args) {
        Date now = new Date();
        SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy hh:mm a")
        String s = df.format(now);
        System.out.println("Today is: " + s);
    }
}

答案 1 :(得分:1)

这是您的代码根本出现的问题:它接受Date并重新调整DateDate与字符串无关,它代表了一个绝对的时刻。如果您至少获得了外部API,我们可能会提出实施建议。

答案 2 :(得分:1)

试试这个:

String time=new SimpleDateFormat("yyyy.MM.dd").format(Calendar.getInstance().getTime());

答案 3 :(得分:0)

首先,为什么要格式化日期并再次解析它以取回日期对象?您可以直接使用实际日期对象。

其次,您要使用format1格式化日期,然后尝试使用format2解析该日期,这与format1不同。因此,ParseException

这就是你需要的。

public Date getCreatedDate() {
    return createdDate;
}

答案 4 :(得分:0)

因为您尝试将yyyy-MM-dd hh:mm:ss日期格式的字符串表示解析为此dd/MM/yyyy hh-mm a日期格式。您希望如何工作?

表示必须匹配。

答案 5 :(得分:0)

只尝试
String dateString = new SimpleDateFormat("dd-MM-yyyy hh:mm a").format(createdDate);
没有什么需要了。

答案 6 :(得分:0)

return createdDate;就是你所需要的。

Date对象格式化为String,然后将String解析回Date对象是没有意义的。

顺便说一句,如果您使用相同的格式模式进行解析和格式化操作,那么它将起作用。

更新:如果您希望Date为格式化字符串,您可以使用:

public String getCreatedDateAsString() {
    return new SimpleDateFormat("dd-MM-yyyy hh:mm a").format(createdDate);
}

java.util.Date仅仅代表自格林威治标准时间1.1.1980以来的一毫秒时间,并且对时间格式和类似事物一无所知。