2016-04-27 5 views
1

Ich entwickle eine App, die die Timing-Informationen eines Posts abrufen kann.Datum basierend auf den Gebietsschemaeinstellungen anzeigen

Was ich will ist, um die Zeit in Milli in Datum anzuzeigen, um es benutzerfreundlich zu machen, aber ich muss darauf achten, das Format des Datums in den Einstellungen des Android-Geräts definiert.

Falls es dd/mm/yyyy oder mm/tt/oder jjjj/tt/mm

, wenn ich in der Lage bin, um das Format zu bestimmen ist, ich brauche nur Tag und Monat zu bekommen. Jahr ist nutzlos für mich.

Ich habe den Code unten getan, aber ich weiß nicht wie die Tatsache, dass ich mit substring bin, denn wenn 01/02 1/2 worden arbeitet Es ist nicht

DateFormat.getDateInstance(DateFormat.SHORT).format(new Date(tweetsCreatedTime)).substring(0,5) 

tweetsCreatedTime in millisec ist und so lange definiert

Anstatt lokale Einstellungen zu verwenden, ist es besser, die Einstellungen zu übernehmen und sicherzustellen, dass der Benutzer, selbst wenn lokal EN oder US angezeigt wird, die Anzeige nicht ändert.

Dank

Antwort

1

Ich benutze DateFormat:

java.text.DateFormat dateFormat = DateFormat.getTimeFormat(context); 
String dateString = dateFormat.format(date); 

es gibt auch Klasse halten java.text.DateFormat im Auge genannt, aber es ist eine andere Klasse .

0

Hallo Verwendung SimpleDateFormater es Gebrauch verwenden Ihr eigenes Format mit einer beliebigen Zeitpunkt unabhängig zu Geräteeinstellungen hier ist eine benutzerdefinierte Methode, die ich Ihnen wünschen Sie wich lokale eine noch alle Zeit verwenden lassen einstellen es die angezeigt werden

Datum
/** 
* Get localized date string (Using given locale) 
* 
* @param dateString Date string 
* @param locale  Desired locale 
* @return Formatted localized date string 
*/ 
public static String formatLocalized(String dateString, Locale locale) { 
    Date date = formatDate(dateString, locale); 
    SimpleDateFormat iso8601Format = new SimpleDateFormat("d MMM yyyy", locale); 
    iso8601Format.setTimeZone(TimeZone.getTimeZone("UTC")); 
    return iso8601Format.format(date); 

} 

definieren lokale Verwendung Locale.ENGLISH | Locale.FRENCH ...

+0

danke, aber Sie erzwingen das Format im SimpleDateFormat. Gibt es eine Möglichkeit, dieses Format von den Einstellungen des Geräts zu bekommen – Seb

+0

Ich denke, was Sie von dem Gerät bekommen können ist, dass local verwendet wird und dieser Wert kann mit Locale.getDefault() gefunden werden; aber die Art, wie ein Datum angezeigt wird, liegt bei Ihnen, wenn das Gebietsschema französisch ist, es im französischen Format anzeigt oder wenn das Gebietsschema Englisch ist (am wahrscheinlichsten;) das Datum im englischen Format anzeigen – thunder413

0

java.time

Sie sollten mod verwenden ern date-classes aus dem Paket java.time.

Für Details siehe my Answer aus einer fast identischen Frage, How can I format Date with Locale in Android.

Kurzer Beispielcode, der die falsche Nummer tweetsCreatedTime in tweetMillisecondsSinceEpoch für die long Nummer Ihres eingegebenen Eingangs ändert. Beachten Sie, dass die Eingabe der java.time-Klassen in Millisekunden die wesentlich feinere Auflösung von Nanosekunden ermöglicht.

Instant instant = Instant.ofEpochMilli(tweetMillisecondsSinceEpoch); // Number of milliseconds since the POSIX epoch of first moment of 1970 in UTC. 
ZoneId zoneId = ZoneId.of("Pacific/Auckland"); // Arbitrary choice of time zone. Crucial it determining the date, as date varies with a new day dawning earlier to the east. 
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant , zoneId); // Apply a time zone. 
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM); // Let java.time translate human language and determine cultural norms in formatting. 
formatter = formatter.withLocale(Locale.CANADA_FRENCH); // Arbitrarily choosing Québec as the Locale. Note that Locale has *nothing* to do with time zone. You could use Chinese locale for a time zone in Finland. 
String output = zdt.format(formatter); // Generate String representation of our date-time value. 

2015-05-23