it-swarm.com.de

Java: Hole Ganzzahl aus Datum

Wie bekomme ich den Monat als Ganzzahl von einem Date-Objekt (Java.util.Date)?

136
Muhd

Java.time (Java 8)

Sie können auch das Java.time-Paket in Java 8 verwenden und Ihr Java.util.Date Objekt in ein Java.time.LocalDate Objekt konvertieren und dann die getMonthValue() -Methode verwenden.

Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int month = localDate.getMonthValue();

Beachten Sie, dass die Monatswerte hier von 1 bis 12 angegeben werden, im Gegensatz zu cal.get(Calendar.MONTH) in der Antwort von adarshr, die Werte von 0 bis 11 ergibt.

Aber wie Basil Bourque in den Kommentaren sagte, ist der bevorzugte Weg, ein Month enum-Objekt mit der LocalDate::getMonth -Methode zu erhalten. 

36
Ortomala Lokni
Java.util.Date date= new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);
262
adarshr

Wenn Sie Java 8 date api verwenden, können Sie es direkt in einer Zeile erhalten!

LocalDate today = LocalDate.now();
int month = today.getMonthValue();
12
Ketan Chitale

Joda-Zeit

Alternativ mit der Joda-TimeDateTime Klasse.

//convert date to datetime
DateTime datetime = new DateTime(date);
int month = Integer.parseInt(datetime.toString("MM"))

…oder…

int month = dateTime.getMonthOfYear();
7
ssoward

tl; dr

myUtilDate.toInstant()                          // Convert from legacy class to modern. `Instant` is a point on the timeline in UTC.
          .atZone(                              // Adjust from UTC to a particular time zone to determine date. Renders a `ZonedDateTime` object. 
              ZoneId.of( "America/Montreal" )   // Better to specify desired/expected zone explicitly than rely implicitly on the JVM’s current default time zone.
          )                                     // Returns a `ZonedDateTime` object.
          .getMonthValue()                      // Extract a month number. Returns a `int` number.

Java.time Einzelheiten

The Answer von Ortomala Lokni für die Verwendung von Java.time ist korrekt. Und Sie sollten verwenden Java.time, da es eine gigantische Verbesserung gegenüber den alten Java.util.Date/.Calendar-Klassen darstellt. Lesen Sie das Oracle Tutorial unter Java.time.

Ich werde Code hinzufügen, der zeigt, wie Java.time ohne Berücksichtigung von Java.util.Date verwendet wird, wenn Sie mit neuem Code beginnen.

Mit Java.time auf den Punkt gebracht ... Ein Instant ist ein Moment auf der Zeitachse in UTC. Wenden Sie eine Zeitzone ( ZoneId ) an, um ein ZonedDateTime zu erhalten.

Die Klasse Month ist eine anspruchsvolle enum , um einen Monat im Allgemeinen darzustellen. Diese Aufzählung enthält praktische Methoden wie das Abrufen eines lokalisierten Namens. Und seien Sie versichert, dass die Monatszahl in Java.time eine vernünftige ist, 1-12, und nicht der auf Null basierende Unsinn (0-11), der in Java.util.Date/.Calendar zu finden ist.

Um die aktuelle Uhrzeit zu erhalten, ist Zeitzone von entscheidender Bedeutung. Zu jedem Zeitpunkt ist das Datum nicht weltweit gleich. Daher ist der Monat nicht derselbe auf der ganzen Welt, wenn er sich dem Ende/Anfang des Monats nähert.

ZoneId zoneId = ZoneId.of( "America/Montreal" );  // Or 'ZoneOffset.UTC'.
ZonedDateTime now = ZonedDateTime.now( zoneId );
Month month = now.getMonth(); 
int monthNumber = month.getValue(); // Answer to the Question.
String monthName = month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH );

About Java.time

Das Java.time Framework ist in Java 8 und höher. Diese Klassen ersetzen das lästige alte Legacy Datum-Zeit-Klassen wie Java.util.Date , Calendar , & SimpleDateFormat .

Das Joda-Time -Projekt, das sich jetzt im Wartungsmodus befindet, rät zur Migration in die Java.time -Klassen.

Weitere Informationen finden Sie im Oracle Tutorial . Durchsuchen Sie Stack Overflow nach vielen Beispielen und Erklärungen. Spezifikation ist JSR 31 .

Sie können Java.time Objekte direkt mit Ihrer Datenbank austauschen. Verwenden Sie einen JDBC-Treiber , der JDBC 4.2 oder höher entspricht. Keine Notwendigkeit für Zeichenfolgen, keine Notwendigkeit für Java.sql.* Klassen.

Woher bekommen Sie die Java.time-Klassen?

Das Projekt ThreeTen-Extra erweitert Java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von Java.time. Hier finden Sie möglicherweise einige nützliche Klassen wie Interval , YearWeek , YearQuarter und mehr .

6
Basil Bourque

Wenn Sie die Joda-Zeit nicht nutzen können und trotzdem in der dunklen Welt leben :) (Java 5 oder niedriger) können Sie Folgendes genießen: 

Hinweis: Stellen Sie sicher, dass Ihr Datum bereits im Format "TT/MM/JJJJ" angegeben ist

/**
Make an int Month from a date
*/
public static int getMonthInt(Date date) {

    SimpleDateFormat dateFormat = new SimpleDateFormat("MM");
    return Integer.parseInt(dateFormat.format(date));
}

/**
Make an int Year from a date
*/
public static int getYearInt(Date date) {

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");
    return Integer.parseInt(dateFormat.format(date));
}
2
Badr DRAIFI
Date mDate = new Date(System.currentTimeMillis());
mDate.getMonth() + 1

Der zurückgegebene Wert beginnt bei 0, Sie sollten also einen Wert zum Ergebnis hinzufügen.

0
twlkyao