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

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

Спасибо

Ответ 1

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

Joda Time делает многие операции с датой/временем намного приятнее.

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

Ответ 2

Просто за String.split(),

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

Ответ 3

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

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

Ответ 4

Создайте объект java.util.Calendar из этой даты следующим образом и извлеките части даты:

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

и др.,

Ответ 5

TL;DR

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

java.time

В современном подходе используются классы java.time. Избегайте трудных классов наследия, таких как 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

Методы Getter

Опросить детали.

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

О java.time

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

Проект Joda-Time, теперь режим обслуживания, советуем перейти к классам java.time.

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

Где получить классы java.time?

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

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

Ответ 6

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

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

Ответ 7

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

Пример:

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

(или)

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