2015-10-13 10 views
4

Вместо этого, например, «9/1/1996» Я хочу, чтобы мой код отображался «09/01/1996». Я не знаю, как более подробно описать мой вопрос. Вот мой код класса MyDate:Отображение даты в двузначном формате - java

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); 
    } 

} 

p.s Я знаю, что есть способ с импортом календарь, но я скорее делать это таким образом.

+1

* Почему * предпочел бы изобретать колесо? Я бы посоветовал вам использовать java.time. * Или Joda Time, а не Date/Calendar, но я настоятельно рекомендую не переустраивать это самостоятельно, если вам действительно не нужно. –

+0

@JonSkeet Я не вижу вреда, пока он учится. –

+0

@HunterMcMillen: Ну, пока OP использует правильный инструмент для работы в реальном мире. Конечно, у меня нет проблем с любопытством, но вам нужно знать, где рисовать линию. –

ответ

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' для вычислений даты почти * no *, отчасти потому, что это было так плохо спроектировано и отчасти потому, что оно представляет только мгновенное время, а не в каком-либо конкретном календаре или часовом поясе. Вы можете использовать java.util.Calendar для большинства вычислений даты, но вам лучше использовать Joda Time или java.time. *. –

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

Строка форматирования вывода.

1

вы должны импортировать также это import java.text.SimpleDateFormat; import java.text.DateFormat; при использовании

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

Вы можете изменить формат строки для String.format раздуть с ведущими нулями:

return String.format("%d/%02d/%02d", year, month, day); 
  • 0 означает набивать выход с ведущими нулями
  • 2 означает, что выход должен составлять 2 символа е (день и месяц)
  • года не нужен модификатор, так как он всегда будет состоять из 4 цифр (по крайней мере, на следующие 8 тысячелетий)

ideone example

+0

Это то, что мне нужно. Большое спасибо)) –

1

Это вопрос номер форматирования. Перед «d» в% d вы можете поместить длину поля числа, и если вам нужны ведущие нули вместо начальных пробелов, то перед этим добавьте «0». Таким образом, поле с 2-значным номером с ведущими нулями - %02d.

Так что ваш код становится:

public String toString() { 
    return String.format("%04d/%02d/%02d", year, month, day); 
} 
Смежные вопросы