Java 格式化日期以获取特定格式的日期

Java 格式化日期以获取特定格式的日期,java,date,formatting,Java,Date,Formatting,我正在尝试格式化日期以获取特定格式的日期。但是它不起作用。不知道为什么!以下是我所做的: for(LeaveApply leaveApply : leaveApplyList) { SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); try { leaveApply.setDate(dateF

我正在尝试格式化日期以获取特定格式的日期。但是它不起作用。不知道为什么!以下是我所做的:

           for(LeaveApply leaveApply : leaveApplyList) {
                SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
                try {
                    leaveApply.setDate(dateFormat.parse(dateFormat.format(leaveApply.getDate())));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
输出为:

LeaveApply [id=1, user=id [1]; loginName [admin], leaveType=Medical Leave, leaveTime=Half Leave, date=Fri Apr 15 00:00:00 IST 2011]
LeaveApply [id=0, user=id [1]; loginName [admin], leaveType=Weekend, leaveTime=Full Leave, date=Sat Apr 02 00:00:00 IST 2011]
LeaveApply [id=0, user=id [1]; loginName [admin], leaveType=Weekend, leaveTime=Full Leave, date=Sun Apr 03 00:00:00 IST 2011]
LeaveApply [id=0, user=id [1]; loginName [admin], leaveType=Weekend, leaveTime=Full Leave, date=Sat Apr 09 00:00:00 IST 2011]
LeaveApply [id=0, user=id [1]; loginName [admin], leaveType=Weekend, leaveTime=Full Leave, date=Sun Apr 10 00:00:00 IST 2011]
LeaveApply [id=0, user=id [1]; loginName [admin], leaveType=Weekend, leaveTime=Full Leave, date=Sat Apr 16 00:00:00 IST 2011]
LeaveApply [id=0, user=id [1]; loginName [admin], leaveType=Weekend, leaveTime=Full Leave, date=Sun Apr 17 00:00:00 IST 2011]
LeaveApply [id=0, user=id [1]; loginName [admin], leaveType=Weekend, leaveTime=Full Leave, date=Sat Apr 23 00:00:00 IST 2011]
LeaveApply [id=0, user=id [1]; loginName [admin], leaveType=Weekend, leaveTime=Full Leave, date=Sun Apr 24 00:00:00 IST 2011]
LeaveApply [id=0, user=id [1]; loginName [admin], leaveType=Weekend, leaveTime=Full Leave, date=Sat Apr 30 00:00:00 IST 2011]
如您所见,日期不是所需的格式(dd-MM-yyy)。任何帮助都是值得的。 LeaveApply类是:

public class LeaveApply implements Serializable {

    private static final long serialVersionUID = -7223672229309295181L;
    private long id;
    private User user;
    private String leaveType;
    private String leaveTime;
    private Date date;

    public LeaveApply() {

    }

    public LeaveApply(User user, String leaveType, String leaveTime, Date date) {
        super();
        this.user = user;
        this.leaveType = leaveType;
        this.leaveTime = leaveTime;
        this.date = date;
    }    

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String getLeaveType() {
        return leaveType;
    }

    public void setLeaveType(String leaveType) {
        this.leaveType = leaveType;
    }

    public String getLeaveTime() {
        return leaveTime;
    }

    public void setLeaveTime(String leaveTime) {
        this.leaveTime = leaveTime;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    @Override
    public String toString() {
        return "LeaveApply [id=" + id + ", user=" + user + ", leaveType=" + leaveType + ", leaveTime=" + leaveTime + ", date=" + date + "]";
    }    
}
我将列表打印为:

for (LeaveApply leaveApply : leaveApplyList) {
        System.out.println(leaveApply);
}

打印字符串时,需要使用SimpleDataFormat格式化字符串。您的代码现在所做的是:

  • 获取时间戳
  • 格式化
  • 将格式化字符串解析回时间戳
  • 设置时间戳
这是一个相当昂贵的no-op,因为Date对象只包含表示时间戳的long,没有格式信息


此外,在打印时间戳的地方,使用默认的日期格式。您应该使用在该点格式化的日期。

打印字符串时,需要使用SimpleDataFormat格式化字符串。您的代码现在所做的是:

  • 获取时间戳
  • 格式化
  • 将格式化字符串解析回时间戳
  • 设置时间戳
这是一个相当昂贵的no-op,因为Date对象只包含表示时间戳的long,没有格式信息


此外,在打印时间戳的地方,使用默认的日期格式。您应该使用在该点格式化的日期。

格式化时,您将在字符串中获得所需的格式,当您将其解析回时,您将获得日期对象,它将执行
toString()
,因此您将始终获得默认格式

格式化时,您将在字符串中获得所需的格式,当您重新解析它时,您将获得日期对象,它将执行
toString()
,因此您将始终获得默认格式

在您的
LeaveApply.toString()
实现中调用
SimpleDataFormat.format(Date)
,以获得所需的输出。

在您的
LeaveApply.toString()实现中调用
SimpleDataFormat.format(Date)
,以获得所需的输出。

我很困惑-您从日期开始,将其转换为字符串,然后将其解析回日期。为什么?只需使用原始日期,对吗?“leaveApply.getDate();”的格式是什么?@MeBigFatGuy谢谢。我这样做是因为所有日期的格式不同。一些日期是“E MMM dd 00:00:00 Z”,另一个是“yyyy MM dd 00:00:00.0”。但是leaveApply.getDate()返回一个java.util.date对象,对吗?@Harry Joy我没有为leaveApply对象的date属性字段维护任何格式,它是一个简单的日期类型。我很困惑-你从一个日期开始,把它转换成字符串,然后将其解析回日期。为什么?只需使用原始日期,对吗?“leaveApply.getDate();”的格式是什么?@MeBigFatGuy谢谢。我这样做是因为所有日期的格式不同。有些日期是“E MMM dd 00:00:00 Z”,另一些是“yyyy MM dd 00:00:00.0”。但是leaveApply.getDate()返回一个java.util.date对象,对吗?@Harry Joy我没有为leaveApply对象的日期属性字段维护任何格式,它只是一个简单的日期类型。