Как отформатировать дату в Java?

#java

#java

Вопрос:

Как можно изменить этот формат даты «2011-09-07T00:00:00 02:00» на «dd.MM . «то есть «07.09».

Заранее спасибо!

Комментарии:

1. Вы искали «Как отформатировать дату в Java?» в Интернете или даже на этом сайте? Я так не думаю..

Ответ №1:

вот пример

отредактировал код:

 public static void main(String[] args) throws ParseException {
    String input = "2011-09-07T00:00:00 02:00";
    SimpleDateFormat inputDf = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat outputDf = new SimpleDateFormat("dd.MM");

    Date date = inputDf.parse(input.substring(0,9));
    System.out.println(date);
    System.out.println(outputDf.format(date));
}
  

Комментарии:

1. Я буду получать вышеупомянутый формат даты в качестве входных данных из XML-файла, и мне нужно преобразовать его в «dd.MM »

2. @neha проверьте новый код на соответствие вашим требованиям. Если вы этого не понимаете, попробуйте отладить код в eclipse. Вы должны быть в состоянии понять это

Ответ №2:

В основном —

  1. Создайте объект формата даты из приведенной выше строки

  2. Проанализируйте объект date и переформатируйте, как вам удобнее.

Например (я не тестировал это):

 /*
 * REFERENCE:
 * http://javatechniques.com/blog/dateformat-and-simpledateformat-examples/
 */
import java.text.DateFormat;
import java.util.Date;

public class DateFormatExample1 {

    public static void main(String[] args) {
        // Make a new Date object. It will be initialized to the current time.
        DateFormat dfm = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
        Date d = dfm.parse("2011-09-07 00:00:00");

        // See what toString() returns
        System.out.println(" 1. "   d.toString());

        // Next, try the default DateFormat
        System.out.println(" 2. "   DateFormat.getInstance().format(d));

        // And the default time and date-time DateFormats
        System.out.println(" 3. "   DateFormat.getTimeInstance().format(d));
        System.out.println(" 4. "  
            DateFormat.getDateTimeInstance().format(d));

        // Next, try the short, medium and long variants of the
        // default time format
        System.out.println(" 5. "  
            DateFormat.getTimeInstance(DateFormat.SHORT).format(d));
        System.out.println(" 6. "  
            DateFormat.getTimeInstance(DateFormat.MEDIUM).format(d));
        System.out.println(" 7. "  
            DateFormat.getTimeInstance(DateFormat.LONG).format(d));

        // For the default date-time format, the length of both the
        // date and time elements can be specified. Here are some examples:
        System.out.println(" 8. "   DateFormat.getDateTimeInstance(
            DateFormat.SHORT, DateFormat.SHORT).format(d));
        System.out.println(" 9. "   DateFormat.getDateTimeInstance(
            DateFormat.MEDIUM, DateFormat.SHORT).format(d));
        System.out.println("10. "   DateFormat.getDateTimeInstance(
            DateFormat.LONG, DateFormat.LONG).format(d));
    }
}
  

Комментарии:

1. Ваша первая строка формата неверна — месяцы — это ММ, а не мм.

2. … и вам не хватает ‘T’ и сегмента часового пояса даты / метки времени.

3. Я буду получать вышеупомянутый формат даты в качестве входных данных из XML-файла, и мне нужно преобразовать его в «dd.MM »

Ответ №3:

Ваш код нуждается в небольшой коррекции в следующей строке

 Date date = inputDf.parse(input.substring(0,9));
  

Вместо (0,9) вам нужно ввести (0,10) , и вы получите желаемый результат.

Ответ №4:

tl; dr

 OffsetDateTime.parse( "2011-09-07T00:00:00 02:00" ).format( DateTimeFormatter.ofPattern( "dd.MM" )
  

java.time

В вопросе и других ответах используются старые устаревшие классы, которые оказались сложными и запутанными. Они были вытеснены классами java.time .

Ваша входная строка находится в стандартном формате ISO 8601. Эти форматы используются по умолчанию в классах java.time. Поэтому нет необходимости указывать шаблон форматирования.

 OffsetDateTime odt = OffsetDateTime.parse( "2011-09-07T00:00:00 02:00" );
  

Вы можете сгенерировать строку в желаемом формате.

 DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd.MM" );
String output = odt.format( f );
  

MonthDay

Вам нужны месяц и день месяца. На самом деле для этого есть класс, MonthDay .

 MonthDay md = MonthDay.from( odt );
  

Вы можете сгенерировать строку в желаемом формате.

 DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd.MM" );
String output = md.format( f );