Problem mit Calendar.getDisplayName()

pitsoft21

Mitglied
Hallo der Monatsname sollte auf Grund der Formatangabe "LONG" als ganzer Monatsname ausgegeben werden.

Er wird aber nur mit 3 Buchstaben ausgegeben.
Wie komme ich an den ganzen Monatsname? Also "November" statt nur "Nov"


[CODE lang="java" title="Calendar.getDisplayName()"]

package pitsoft.poi_excel;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;

public class Test
{


public Test()
{
Locale loc=new Locale("GERMAN","GERMANY");

TimeZone tz=TimeZone.getDefault();
GregorianCalendar cal=new GregorianCalendar(tz,loc);
String monat=cal.getDisplayName(Calendar.MONTH, Calendar.LONG, loc);
System.out.println("Monat="+monat);
}

public static void main(String[] args)
{
new Test();

}

}
[/CODE]
 
Du setzt das Locale falsch. Probier es mal mit den statischen Locals in der Local class
Java:
Locale loc= Locale.GERMAN;
Edit:
Bzw nehm GERMANY, GERMAN ist nur die Sprache.
Falls du den Constructor verwenden willst, was ich nicht machen würde wenn es schon statisch Locals gibt:
new Local("DE", "de");
 
java.util.Calendar ist etwas veraltet. Besser du verwendest die Klassen aus java.time.*
Java:
        LocalDate date = LocalDate.now();
        for (int i = 0; i < 12; i++) {
            date = date.plusMonths(1);
            System.out.println(date.getMonth().getDisplayName(TextStyle.FULL, Locale.GERMANY));
        }
 
der Monatsname sollte auf Grund der Formatangabe "LONG" als ganzer Monatsname ausgegeben werden.

Das ist nicht ganz korrekt, es soll die "Langform des Namens fuer diesen Monat laut Locale" ausgegeben werden. Je nach Locale kann das natuerlich fuer den November jeder Wert zwischen "N" und "Fritzeridudli" sein. Die Locale bestimmt was in diesem Fall ausgegeben wird.

Da du dir hier eine neue Locale erzeugst, ist es etwas schwer zu sagen auf was genau zurueck gefallen wird. Die neue Locale zieht sich Standardwerte und verwendet diese beziehungsweise gibt es eine Infrastruktur welche auf den Locales aufbaut um die richtigen Werte zu haben. Auf meinem Systen zum Beispiel, kommt hier sehr wohl "November" als Ausgabe heraus. Du erzeugst diese auch mit "ungewohenlichen" Werten, fuer gewohenlich wird der Sprach- und Landcode verwendet, zum Beispiel new Locale("de", "DE"). Wie die anderen bereits gesagt haben, gibt es aber die statische Locale.GERMAN oder Locale.GERMANY welches konfiguriert sein sollte fuer die "korrekte" Lang-Ausgabe.
 
Das mit dem statischen Locale.German hat erst mal funktioniert.
Zum Thema Calendar habe ich noch eine Frage: Was bewirkt das Setzen von
setFirstDayofWeek. Ich dachte dass sich damit der int Wert für den aktuellen Wochentag ändert. Also wenn Wochenstart der Montag ist und es ist Mittwoch dann kommt da eine 2 zurück. Wenn Wochenstart Sonntag ist dann eine 3. So scheint es aber nicht zu sein. Wie wirkt diese Methode?

Java:
  int dow=    cal.get(Calendar.DAY_OF_WEEK);
  System.out.println("Day of Week="+dow);
  cal.setFirstDayOfWeek(Calendar.THURSDAY);
  dow=cal.get(Calendar.DAY_OF_WEEK);
  System.out.println("Day of Week="+dow);

Hier kommt 2x das Gleiche heraus.
 
Zuletzt bearbeitet:
Es wird einfach nur der aktuelle Wochentag zurückgegeben.
Java:
cal.get(Calendar.DAY_OF_WEEK)
Die 2 ist einfach der Wert der Konstanten für Montag.
Java:
    /**
     * Value of the {@link #DAY_OF_WEEK} field indicating
     * Monday.
     */
    public static final int MONDAY = 2;
 
Calender ist ein graus und es ist da immer extrem wichtig die API Doc zu lesen

Calender.get liefert einen int, der ja nach dem, was du als Konstante rein gibst ein Wert ist (Bei Tag im Monat oder Jahr z.B.) oder die ID eines 0-basierten Enums (Wie bei Wochentagen oder Monaten).

Das heißt, wenn du dir den Monat geben lässt - da das ein Enum ist - kommt 0 für Januar und 11 für Dezember raus. Intuitiv ist was anderes 🙂
 

Zurück
Oben