格式化日期。如何将int值格式化为日期格式?

时间:2012-12-27 19:19:49

标签: java constructor date-format

我可以使用适当的导入方法格式化 CURRENT DATE 日期,但格式化我自己的日期(例如我的生日)是另一个故事。 当使用tostring方法返回时它会起作用,因为我手动格式化它。 无论如何,我的问题是:我可以使用导入格式化我的生日吗?

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

public class Date2 {

    private int month;
    private int day;
    private int year;

    private Date today = Calendar.getInstance().getTime();
    // create a short version date formatter
    private DateFormat shorFormatter = SimpleDateFormat
            .getDateInstance(SimpleDateFormat.SHORT);
    // create a long version of date format
    private DateFormat longFormattter = SimpleDateFormat
            .getDateInstance(SimpleDateFormat.LONG);
    // create date time formatter, medium for day, long for time
    private DateFormat mediuFormattter = SimpleDateFormat.getDateTimeInstance(
            SimpleDateFormat.MEDIUM, SimpleDateFormat.LONG);

    /************ Constructors ***************/

    public Date2() {
    }

    public Date2(int dd, int mm, int yyyy) {
        this.day = dd;
        this.month = mm;
        this.year = yyyy;

    }

    /************ Getters setters ************/

    public Date getToday() {
        return today;
    }

    public String getShorFormatter() {
        return shorFormatter.format(today);
    }

    public String getLongFormattter() {
        return longFormattter.format(today);
    }

    public String getMediuFormattter() {
        return mediuFormattter.format(today);
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public String tosString() {
        return month + "/" + day + "/" + year;
    }
}

public class DateFormatTest {
public static void main(String[] args) {
        Date2 date2 = new Date2(23, 05, 1973);
        System.out.println(date2.getShorFormatter());
        System.out.println(date2.getLongFormattter());
        System.out.println(date2.getMediuFormattter());
        System.out.println(date2.tosString());
    }
}

3 个答案:

答案 0 :(得分:0)

我只是意识到,我的问题没有任何意义,因为它只是一个诞生日。而且无需格式化。

答案 1 :(得分:0)

由于getXXXFormatter()方法仅使用today字段,而构造函数Date2(int, int, int)从不更改该字段,因此它们将始终格式化今天的日期。

你可能想要改变这样的构造函数:

public Date2(int dd, int mm, int yyyy) {
    this.day = dd;
    this.month = mm;
    this.year = yyyy;

    Calendar calendar = Calendar.getInstance();
    calendar.set(yyyy, mm - 1, dd);
    today = calendar.getTime();

}

为了保持一致,您还应该更新setter中的today字段。但我建议让这个类不可变。

无论如何,看起来你正试图制作类似于joda time LocalDate的东西。

答案 2 :(得分:0)

这是怎么回事:

    public String getBirthday() {
      Calendar cal = Calendar.getInstance(Locale.getDefault());
      cal.set(Calendar.DAY_OF_MONTH, 23);
      cal.set(Calendar.MONTH,Calendar.MAY);
      cal.set(Calendar.YEAR,1973);
      //http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
      DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
      String birthdayString = df.format(cal.getTime());//05/23/1975
      return birthdayString;
    }