Получить день, месяц и год отдельно с помощью SimpleDateFormat

у меня есть SimleDateFormat такой

SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy  hh:mm");
String date = format.format(Date.parse(payback.creationDate.date));

Я даю дату с форматом, как "Jan,23,2014".

Теперь я хочу получить день, месяц и год отдельно. Как я могу это реализовать?

8 ответов


Если вам нужно получить значения отдельно, то используйте более одного SimpleDateFormat.

SimpleDateFormat dayFormat = new SimpleDateFormat("dd");
String day = dayFormat.format(Date.parse(payback.creationDate.date));

SimpleDateFormat monthFormat = new SimpleDateFormat("MM");
String month = monthFormat .format(Date.parse(payback.creationDate.date));

etc.


    SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy  hh:mm", Locale.ENGLISH);

    Date theDate = format.parse("JAN 13,2014  09:15");

    Calendar myCal = new GregorianCalendar();
    myCal.setTime(theDate);

    System.out.println("Day: " + myCal.get(Calendar.DAY_OF_MONTH));
    System.out.println("Month: " + myCal.get(Calendar.MONTH) + 1);
    System.out.println("Year: " + myCal.get(Calendar.YEAR));

Вау, SimpleDateFormat для получения части строки? Это можно решить намного проще, если ваша входная строка похожа на "Jan,23, 2014":

String input = "Jan,23,2014";
String[] out = input.split(",");
System.out.println("Year = " + out[2]);
System.out.println("Month = " + out[0]);
System.out.println("Day = " + out[1]);

выход:

Year = 2014
Month = Jan
Day = 23

но если вы действительно хотите использовать SimpleDateFormat по какой-то причине решение будет следующим:

String input = "Jan,23,2014";
SimpleDateFormat format = new SimpleDateFormat("MMM,dd,yyyy");
Date date = format.parse(input);
Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
calendar.setTime(date);
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(new SimpleDateFormat("MMM").format(calendar.getTime()));

выход:

2014
23
Jan

принятый ответ здесь предлагает использовать более одного SimpleDateFormat, но это можно сделать с помощью одного SimpleDateFormat экземпляра и вызов applyPattern.

примечание: Я считаю, что этот пост также будет полезен для тех, кто искал setPattern (), как и я.

Date date=new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
simpleDateFormat.applyPattern("dd");
System.out.println("Day   : " + simpleDateFormat.format(date));
simpleDateFormat.applyPattern("MMM");
System.out.println("Month : " + simpleDateFormat.format(date));
simpleDateFormat.applyPattern("yyyy");
System.out.println("Year  : " + simpleDateFormat.format(date));

tl; dr

использовать LocalDate класса.

LocalDate
.parse(
    "Jan,23,2014" , 
    DateTimeFormatter.ofPattern( "MMM,dd,uuuu" , Locale.US )
)
.getYear()

или .getMonthValue() или .getDayOfMonth.

java.время

в других ответах используются устаревшие классы. Ява.классы времени вытесняют эти беспокойные старые классы наследия.

LocalDate

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

String input = "Jan,23,2014";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM,d,uuuu" );
LocalDate ld = LocalDate.parse( input , f );

опросить для частей вы хотите.

int year = ld.getYear();
int month = ld.getMonthValue();
int dayOfMonth = ld.getDayOfMonth();

о java.время

на java.время framework встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

на Joda Времени, теперь режим обслуживания, советует переходить на java.время классы.

чтобы узнать больше, см. В Oracle Учебник. И search Stack Overflow для многих примеров и объяснений. Спецификация JSR 310.

вы можете обменять java.время объекты непосредственно с вашей базой данных. Используйте драйвер JDBC соответствуют JDBC 4.2 или позже. Нет необходимости в строках, нет необходимости в java.sql.* занятия.

где получить java.время занятий?

  • Java SE 8, Java SE 9, Java SE 10, Java SE 11, а позже-часть стандартного API Java с встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • большая часть java.функциональность времени обратно портирована на Java 6 & 7 в ThreeTen-Backport.
  • Android

на ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательной площадкой для возможных будущих дополнений к java.время. Вы можете найти некоторые полезные классы здесь такие как Interval, YearWeek, YearQuarter и больше.


используйте это для разбора "Jan, 23, 2014"

SimpleDateFormat fmt = new SimpleDateFormat("MMM','dd','yyyy"); 
Date dt = fmt.parse("Jan,23,2014");

тогда вы можете получить любую часть даты.


вы принимаете это ?

int day = 25 ; //25
int month =12; //12
int year = 1988; // 1988
Calendar c = Calendar.getInstance();
c.set(year, month-1, day, 0, 0);    
SimpleDateFormat format =   new SimpleDateFormat("MMM dd,yyyy  hh:mm");
System.out.println(format.format(c.getTime()));

отображать как Dec 25,1988 12:00

обновление : на основе комментария

DateFormat format =   new SimpleDateFormat("MMM");
System.out.println(format.format(format.parse("Jan,23,2014")));

Примечание: дата.parse () является @deprecated и в соответствии с API рекомендуется использовать DateFormat.разбор


public static String getDate(long milliSeconds, String dateFormat) {
        // Create a DateFormatter object for displaying date in specified
        // format.
        SimpleDateFormat formatter = new SimpleDateFormat(dateFormat,
                Locale.getDefault());

        // Create a calendar object that will convert the date and time value in
        // milliseconds to date.
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(milliSeconds);
        return formatter.format(calendar.getTime());
    }