Joda Time - День месяца и месяц года Не возвращается 2-значный вывод

У меня есть следующий код:

String dateUTC = "2013-09-08T10:23:54.663-04:00";
org.joda.time.DateTime dateTime = new DateTime(dateUTC);
System.out.println(" Year : " + dateTime.getYear());
System.out.println(" Month : " + dateTime.getMonthOfYear());
System.out.println(" Day : " + dateTime.getDayOfMonth()); 

The Output of this program is :
Year : 2013
Month : 9 // I want this to be 2 digit if the month is between 1 to 9
Day : 8 // I want this to be 2 digit if the month is between 1 to 9

Есть ли способ получить значение месяца и года в 2-х цифрах с помощью API Joda.

Ответ 1

Альтернативным способом будет использование десятичного форматирования

 DecimalFormat df = new DecimalFormat("00");

=============================================== ===========================================

import java.text.DecimalFormat;
import org.joda.time.DateTime;
public class Collectionss {
    public static void main(String[] args){
        DecimalFormat df = new DecimalFormat("00");
        org.joda.time.DateTime dateTime = new DateTime();
        System.out.println(" Year : "+dateTime.getYear());      
        System.out.println(" Month : "+ df.format(dateTime.getMonthOfYear()));
        System.out.println(" Day : "+dateTime.getDayOfMonth()); 
    }

}

Ответ 2

Вы можете просто использовать AbstractDateTime#toString(String)

System.out.println(" Month : "+ dateTime.toString("MM"));
System.out.println(" Day : "+ dateTime.toString("dd")); 

Ответ 3

Вы вызываете getMonthOfYear() - это просто возвращает int. Какую ценность он мог бы вернуть на месяц раньше, чем October, который удовлетворит вас? Другими словами, позвольте взять Joda Time из уравнения... что вы ожидаете от вывода этого?

int month = 9;
System.out.println(" Month : " + month);

?

Вам нужно понять разницу между данными (целое в этом случае) и текстовое представление, которое вы хотите для этого целого. Если вам нужен конкретный формат, я предлагаю вам использовать DateTimeFormatter. (Очень редко бывает, что нужно печатать одно поле одновременно... Я бы ожидал, что вы захотите что-то вроде "2013-09-08" в виде одной строки.)

Вы также можете использовать String.format для управления выходным форматом или DecimalFormat или PrintStream.printf - существует множество способов форматирования целых чисел. Вам нужно понять, что число 9 - это всего лишь номер 9, но у него нет связанного с ним формата.

Ответ 4

Пример:

Calendar c = Calendar.getInstance();
System.out.format("%tB %te, %tY%n", c, c, c); // -->  "September 10, 2013"
System.out.format("%tl:%tM %tp%n", c, c, c);  // -->  "01:59 pm"
System.out.format("%tD%n", c);    // -->  "09/10/13"