Wie kann ich die Einstellung von Datum und Zeit Formatierung, die in Java Respekt des Benutzers OS-Einstellungen
Ich bin mit meinem Java-app auf einem Windows 7-Maschine, wo meine regionalen Einstellungen eingerichtet sind, formatieren von Daten als YYYY-mm-dd und die Zeit als HH:mm:ss (z.B. "2011-06-20 07:50:28"). Aber wenn ich DateFormat.getDateTimeInstance().format
formatieren von Datum sehe ich nicht, sondern ich bekomme "20-Jun-2011 7:50:28 UHR". Was muss ich tun, um das formatieren von Daten in der Weise, dass meine Kunden haben Ihre OS-setup, um Daten anzuzeigen?
Hier ist, was mein code in Frage, der wie folgt aussieht:
File selGameLastTurnFile = selectedGame.getLastTurn ().getTurnFile ();
Date selGameModifiedDate = new Date (selGameLastTurnFile.lastModified());
if (selectedGame.isYourTurn ()) {
gameInfo = Messages.getFormattedString ("WhoseTurnIsIt.Prompt.PlayTurn", //$NON-NLS-1$
FileHelper.getFileName (selGameLastTurnFile),
DateFormat.getDateTimeInstance().format(selGameModifiedDate));
} else {
gameInfo = Messages.getFormattedString ("WhoseTurnIsIt.Prompt.SentTurn", //$NON-NLS-1$
selGameLastTurnFile.getName (),
DateFormat.getDateTimeInstance().format(selGameModifiedDate));
}
Den Messages.getFormattedString
Anrufe werden mit MessageFormat
setzen Sie das Datum in einem Satz, der wie folgt Aussehen wird:
Spielen die turn 'QB Nat vs Ian 008' (erhalten 20-Jun-2011 7:50:28 AM)
Aber mein OS-Einstellungen sind setup, um das Datum zu formatieren, wie ich oben beschrieben habe, und ich erwartete zu sehen:
Spielen die turn 'QB Nat vs Ian 008' (empfangen 2011-06-20 07:50:28)
Suchte ich hier und in anderen Java-Programmierung von Websites und konnte keine Antwort finden, aber dies scheint wie eine offensichtliche Sache zu tun will, ich fühle mich wie ich bin etwas fehlt offensichtlich.
- Zur Klärung, ich bin versucht, um Datum und Uhrzeit-Formatierung wie angegeben von meinen Kunden' - OS-Einstellungen. Viele Menschen, mich eingeschlossen, optimieren Sie Ihr Datum, Zeit und Währung die Einstellungen von der Gebietsschema-Standardeinstellungen. Ich will nicht immer nur das bekommen, was jemand bei Oracle Dinge ist die Art, wie Daten formatiert werden sollen für ein bestimmtes Gebietsschema möchte ich das formatieren, dass meine Kunden auf Ihre OS. Ich hoffe, dass macht meine Anfrage klarer.
- Es ist wirklich ärgerlich, dass meine C-implementation kann es tun, aber nicht Java.
strftime("%c")
mit locale""
funktioniert perfekt. - Während der Verwendung der
DateFormat
Klasse, wenn diese Frage wurde vor 8 Jahren vernünftig war,, die Klasse ist notorisch lästig und jetzt ist längst überholt. Heute müssen Sie stattdessenDateTimeFormatter
von java.Zeit, die moderne Java-Datums-und Zeit-API.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht tun dies in pure Java. Es gibt keinen Weg, Sun/Oracle könnte dieses system unabhängig.
Einen schnellen durchsuchen der .NET-Bibliotheken gibt auf dieser Seite - zu zitieren:
Ich würde vorschlagen, dass Sie dies tun in einer Weise, die ist system-abhängig von Windows, wenn Sie diese Funktionalität benötigen (z.B. Zugriff auf die Windows-Registrierung, wie @laz vorgeschlagen).
Erste, Sie haben zu sagen, Java, was Ihr system LOCALE aussieht.
Überprüfen Sie Java-System.
String locale = System.getProperty("user.language")
Und dann das Datum zu formatieren accordinly ("=SimpleDateFormat)
SimpleDateFormat(String pattern, Locale locale)
Beziehen sich auf die praktische Java-code für ein Beispiel...
Locale locale = new Locale(System.getProperty ("user.language"), System.getProperty("user.country"));
ich kann die locale aber, wenn ich, dass mitDateFormat.getDateTimeInstance
ich tun nicht erhalten Sie die Formatierung angegeben durch das OS.new SimpleDateFormat().format(selGameModifiedDate)
welcher sagt, es nutzt die Standard-Muster für den default-locale. Aber es ist nicht mit meinem OS-Einstellungen. Was ist die Magie hier? Sicherlich jeder, der Programme in Java haben will, die Daten zu präsentieren, die Zeit und die anderen Elemente formatiert als der Benutzer erwartet, dass basierend auf den OS-Einstellungen? Vielen Dank für Eure Hilfe - ich hoffe, jemand hat einen Einblick darüber, wie dies zu tun.DateFormat.SHORT
statt und ich bekomme die Ausgabe: 7/16/11 7/16/11 16/07/11 Aber die Sache ist mein Standard-Muster-set auf mein OS ist 'yyyy-MM-dd', aber ich nicht bekommen, die. Was möchte ich in der Lage sein zu tun ist, Holen Sie das Datum so formatiert, wie meine Kunden, die angegeben haben, in Ihrem OS. Was der code, den ich verwende-und die Sie angeboten haben, ist mir ein format, dass ist diktiert von der JVM als format für ein bestimmtes Gebietsschema. Ich hoffe es gibt einen Weg, um zu bekommen, was die OS-Datum-format ist festgelegt.Fand ich diese Java-utility-Klasse, die von JetBrains, die ruft das benutzerdefinierte Gebietsschema-Einstellungen aus dem Betriebssystem (sowohl Windows und Mac) und hat die richtige Formatierung für Sie:
https://github.com/JetBrains/intellij-community/blob/master/platform/util/src/com/intellij/util/text/DateFormatUtil.java
Es ist unter der Apache-2.0-Lizenz, so können Sie wahrscheinlich verwenden Sie es in Ihrem Projekt.
Date
,Calendar
,SimpleDateFormat
), anstatt Ihre moderne Ersetzungen, mit dem java.Zeit - Klassen.Oracle JDK 8 komplett unterstützt Sie die Formatierung mit " user-Betriebssystem angepasst regionalen Einstellungen.
Setzen Sie einfach die system property
java.locale.providers=HOST
Laut https://docs.oracle.com/javase/8/docs/technotes/guides/intl/enhancements.8.html:
Die Umsetzung dieser formatter ist in der Klasse
sun.util.locale.provider.HostLocaleProviderAdapterImpl
.Bei Verwendung von system-property ist nicht akzeptabel (sagen wir, dein wollen nicht auf die gesamte Anwendung), ist es möglich, die provider-Klasse direkt. Die Klasse ist die interne API, sondern kann erreicht werden über die Reflexion:
Ich sieht aus wie Sie benötigen Zugriff auf die Windows-registry nach dieser. Sehen Sie, diese Frage für die verschiedenen Lösungen, die lese - /Schreibzugriff auf Windows-Registry mit Java.
Sobald Sie wählen Sie eine der vielen Methoden zum Zugriff auf die registry zu kommen musst du den richtigen Schlüssel aus der Registrierung für das format. Diese Dokument zeigt, der Schlüssel zu verwenden ist
HKEY_USERS\.Default\Control Panel\International
.Bei der Verwendung von GNOME in Linux, können Sie die
gconftool
ähnlichen Befehl wie denreg
Befehl für Windows wie bereits erwähnt, in den vorherigen links zu der Windows-Registrierung. Ich sehe den Schlüssel/apps/panel/applets/clock_screen0/prefs/custom_format
in meiner Konfiguration, wenn es leer ist da ich mit dem Standard:Ich bin mir nicht sicher, ob das ist der Wert, den Sie möchten, um für Ihre Zwecke nutzen oder nicht.
Unter Mac OS bin ich mir nicht sicher, was Sie tun würde.
Vielleicht bin ich Missverständnis, was Sie bekommen Sie hier, aber Sie müssen verwenden Sie die Locale.
Durch die Verwendung von Locale kann man Steuern, welches format für welche region Sie verwenden.
Datum und Uhrzeit-Formate sind Teil der Java-locale-Daten. Java bekommen kann, ist die Gebietsschema-Daten von bis zu vier Quellen. Welche es verwendet wird, wird durch die
java.locale.providers
system-Eigenschaft. Standard-bis zu Java 8 warJRE,SPI
. Von Java 9 ist esCLDR,COMPAT
. Keine wird dir das Datum und die Zeit, die Daten aus dem Betriebssystem, aber Sie können Sie durch Angabe derHOST
Gebietsschema-Anbieter, zum Beispiel wie in der obigen Befehlszeile. Wenn Sie Ihr Programm mit dieser Eigenschaft-definition, können Sie zum Beispiel:Dieser druckt das aktuelle Datum und die Uhrzeit in dem format, definiert durch das zugrunde liegende Betriebssystem. In dem Maße, dass das Betriebssystem es unterstützt, variieren Sie die Länge der Ausgabe ist durch die Verwendung von format-Formatvorlagen
FULL
,LONG
,MEDIUM
undSHORT
.Für die meisten Zwecke werden Sie wollen, um eine
DateTimeFormatter
wissen, das format so wie im obigen code. In dem seltenen Fall, wo Sie möchten wissen, eine format-string Muster, das ist auch möglich:Das erste argument
getLocalizedDateTimePattern
ist die Datum format nicht. Die zweite ist die Zeit Stil.