Получение значений месяца, дня и года из строки с помощью Java

Как извлечь значения дня, месяца и года из строки [например, 18/08/2012]. Я попытался использовать SimpleDateFormat, но он возвращает объект Date, и я заметил, что все методы Get устарели. Есть ли лучший способ сделать это?

спасибо

7 ответов


лично я использую Джода Времени, что значительно упрощает жизнь. В частности, это означает, что вам не нужно беспокоиться о часовой пояс Calendar vs часовой пояс a SimpleDateFormat - вы можете просто разобрать на LocalDate, что данные действительно показывает вам. Это также означает, что вам не нужно беспокоиться о месяцев с 0 :)

время Джода делает много деятельностей даты / времени Очень более приятным.

import java.util.*;
import org.joda.time.*;
import org.joda.time.format.*;

public class Test {

    public static void main(String[] args) throws Exception {
        DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy")
            .withLocale(Locale.UK);

        LocalDate date = formatter.parseLocalDate("18/08/2012");

        System.out.println(date.getYear());  // 2012
        System.out.println(date.getMonthOfYear()); // 8
        System.out.println(date.getDayOfMonth());   // 18
    }
}

просто пойти на String.split(),

String str[] = "18/08/2012".split("/");
int day = Integer.parseInt(str[0]);
int month = Integer.parseInt(str[1]);
..... and so on

Это должно заставить вас идти без добавления внешних банок

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");  
Date parse = sdf.parse("18/08/2012");  
Calendar c = Calendar.getInstance();  
c.setTime(parse);  
System.out.println(c.get(Calendar.MONTH) + c.get(Calendar.DATE) + c.get(Calendar.YEAR)); 

создайте java.утиль.Объект календаря из этой даты выглядит следующим образом и извлекает части даты:

Calendar cal = Calendar.getInstance();
cal.setTime(<date from simple-date-format).
cal.get(Calendar.MONTH);

etc.,


другой подход может быть использован календарь объект get(Calendar.MONT)

пример:

Calendar cal = Calendar.getInstance();
cal.setTime(dateObj).
cal.get(Calendar.MONTH);

(или)

Вы можете использовать строку.split () также.


tl; dr

java.time.LocalDate.parse(
    "18/08/2012" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) 
).getDayOfMonth​() // .getYear​() .getMonth()

java.время

современный подход использует java.время классы. Избегайте проблемных устаревших классов, таких как Date & Calendar.

LocalDate

String input = "18/08/2012" ;

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

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;

ld.toString (): 2012-08-18

Геттер методы

допрос для частей.

int d = ld.getDayOfMonth​() ;
int m = ld.getMonthValue() ;
int y = ld.getYear() ;

о java.время

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

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

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

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

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

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


используйте это и передайте значение даты

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date parse = sdf.parse(""18/01/2018);
Calendar calendar = Calendar.getInstance();
calendar.setTime(parse);
int date = calendar.get(Calendar.DATE);
//+1 Is Important Because if the month is January then coming 0 so Add +1
int month = calendar.get(Calendar.MONTH)+1;
int year = calendar.get(Calendar.YEAR);
System.out.println("Date:"+date +":Month:"+ month + ":Year:"+year);