以Java编程语言显示日期的双位数格式

4

例如,我希望代码显示“09/01/1996”而不是“9/1/1996”。我不知道如何更具体地描述我的问题。这是 MyDate 类的代码:

public class MyDate {

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

    public MyDate(int y, int m, int d){
        year = y;
        month = m;
        day = d;

        System.out.printf("I'm born at: %s\n", this);
    }

    public  String toString(){
        return String.format("%d/%d/%d", year, month,  day);
    }
  }

这里是我的主要方法:

public class MyDateTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        MyDate birthday = new MyDate(31,12,1995);
    }

}

我知道可以通过导入日历的方式实现,但我更愿意用这种方法。


1
为什么要重复造轮子呢?我建议您使用java.time.*或Joda Time而不是Date/Calendar,但我强烈建议您不要重新实现它,除非您真的非常需要。 - Jon Skeet
@JonSkeet 只要是为了学习,我认为没有什么害处。 - Hunter McMillen
@HunterMcMillen:嗯,只要原帖作者在现实世界中使用正确的工具,我就没有问题。当然,好奇心是可以理解的,但你需要知道在哪里划线。 - Jon Skeet
5个回答

3
根据您的问题,似乎您正在使用自定义日期类。但是,您可以使用内置的java.util.Date类来表示或比较任何类型的日期。因此,您可以使用DateFormat来显示格式化的日期时间。请考虑以下示例。
    Date date = //code to get your date

    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    System.out.println(dateFormat.format(date));

输出:

13/10/2015

此外,您还应该指定DateFormat的模式。使用以下表格进行日期格式化字符的设置。

enter image description here

如果您仍需要使用您的神奇MyDate类,您可以使用以下带前导零的System.out.printf指定。
System.out.printf("%02d/%02d/%04d", date, month, year);

3
“但是你可以使用内置的java.util.Date类进行任何类型的日期计算”- 不,你几乎无法使用Date进行日期计算,部分原因是它的设计很糟糕,部分原因是它仅表示某一时刻,而不是特定日历或时区中的时间。你可以使用java.util.Calendar进行大多数日期计算,但最好使用Joda Time或java.time.*。 - Jon Skeet

2

这是一个数字格式化的问题。在%d中的'd'前面,您可以放置数字字段的长度,如果您想要前导零而不是前导空格,则在其前面添加'0'。因此,具有前导零的2位数字字段为%02d

因此,您的代码变成:

public String toString() {
    return String.format("%04d/%02d/%02d", year, month, day);
}

1
String.format("%d/%02d/%02d", year, month,  day)

格式化输出字符串。


1
你可以更改String.format的格式字符串,以使用前导零进行填充:
return String.format("%d/%02d/%02d", year, month,  day);
  • 0 表示在输出前补零
  • 2 表示输出应为 2 个字符宽(日和月)
  • 年份不需要修饰符,因为它始终是 4 位数(至少在未来的 8 千年内是这样的)

ideone 示例


这正是我所需要的。非常感谢)) - Slender Man

1

当使用时,您还应导入以下内容:import java.text.SimpleDateFormat; import java.text.DateFormat;

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    System.out.println(dateFormat.format(date)); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接