web-dev-qa-db-de.com

Wie formatieren Sie Datum und Uhrzeit in Android?

Wie formatieren Sie ein Datum und eine Uhrzeit entsprechend der Gerätekonfiguration richtig, wenn Sie Jahr, Monat, Tag, Stunde und Minute haben?

270
pupeno

Verwenden Sie die Standard-Java-DateFormat-Klasse.

Um beispielsweise das aktuelle Datum und die aktuelle Uhrzeit anzuzeigen, gehen Sie wie folgt vor:

Date date = new Date(location.getTime());
DateFormat dateFormat = Android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));

Sie können ein Date-Objekt mit Ihren eigenen Werten initialisieren. Sie sollten jedoch wissen, dass die Konstruktoren veraltet sind und Sie eigentlich ein Java-Kalenderobjekt verwenden sollten.

265
JamieH

Meiner Meinung nach macht Android.text.format.DateFormat.getDateFormat(context) mich verwirrt, da diese Methode Java.text.DateFormat statt Android.text.format.DateFormat - - "zurückgibt.

Daher verwende ich den Fragmentcode wie folgt, um das aktuelle Datum/die aktuelle Uhrzeit in meinem Format abzurufen.

Android.text.format.DateFormat df = new Android.text.format.DateFormat();
df.format("yyyy-MM-dd hh:mm:ss a", new Java.util.Date());

or

Android.text.format.DateFormat.format("yyyy-MM-dd hh:mm:ss a", new Java.util.Date());

Darüber hinaus können Sie andere Formate verwenden. Folgen Sie DateFormat.

186
Fuangwith S.

Sie können DateFormat verwenden. Das Ergebnis hängt vom Standardgebietsschema des Telefons ab. Sie können jedoch auch das Gebietsschema angeben: 

https://developer.Android.com/reference/Java/text/DateFormat.html

Dies ist Ergebnisse auf einer 

DateFormat.getDateInstance().format(date)                                          

FR Gebietsschema: 3. Nov. 2017

USA/En Gebietsschema: 12. Januar 1952


DateFormat.getDateInstance(DateFormat.SHORT).format(date)

FR Gebietsschema: 11.03.2017

Land der USA/En: 12.13.52


DateFormat.getDateInstance(DateFormat.MEDIUM).format(date)

FR Gebietsschema: 3. Nov. 2017

USA/En Gebietsschema: 12. Januar 1952


DateFormat.getDateInstance(DateFormat.LONG).format(date)

FR Gebietsschema: 3. November 2017

US/En Gebietsschema: 12. Januar 1952


DateFormat.getDateInstance(DateFormat.FULL).format(date)

FR Gebietsschema: vendredi 3 novembre 2017

US/en Gebietsschema: Dienstag, 12. April 1952


DateFormat.getDateTimeInstance().format(date)

FR Gebietsschema: 3. Nov. 2017 16:04:58


DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date)

FR Gebietsschema: 11.03.2017, 16:04 Uhr


DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(date)

FR Gebietsschema: 11.03.2017 16:04:58


DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG).format(date)

FR Gebietsschema: 03/11/2017 16:04:58 GMT + 01: 00


DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL).format(date)

FR Gebiet: 03/11/2017 16:04:58 heure normale d’Europe centrale


DateFormat.getTimeInstance().format(date)

FR Gebietsschema: 16:04:58


DateFormat.getTimeInstance(DateFormat.SHORT).format(date)

FR Gebietsschema: 16:04


DateFormat.getTimeInstance(DateFormat.MEDIUM).format(date)

FR Gebietsschema: 16:04:58


DateFormat.getTimeInstance(DateFormat.LONG).format(date)

FR Gebietsschema: 16:04:58 GMT + 01: 00


DateFormat.getTimeInstance(DateFormat.FULL).format(date)

FR Gebietsschema: 16:04:58 heure normale d’Europe centrale


79
Dany Poplawec

Date to Locale Datumszeichenfolge:

Date date = new Date();
String stringDate = DateFormat.getDateTimeInstance().format(date);

Optionen:

   DateFormat.getDateInstance() 

-> 31. Dezember 1969

   DateFormat.getDateTimeInstance() 

-> 31. Dezember 1969 16:00 Uhr

   DateFormat.getTimeInstance() 

-> 16:00 Uhr

35
Ivo Stoyanov

Das wird es tun: 

Date date = new Date();
Java.text.DateFormat dateFormat = Android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
19
tronman

Im Anschluss daran: http://developer.Android.com/reference/Android/text/format/Time.html

Ist es besser, die native Zeitklasse für Android zu verwenden:

Time now = new Time();
now.setToNow();

Dann formatieren Sie:

Log.d("DEBUG", "Time "+now.format("%d.%m.%Y %H.%M.%S"));
14
FireZenk

SimpleDateFormat verwenden

So was:

event.putExtra("starttime", "12/18/2012");

SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
Date date = format.parse(bundle.getString("starttime"));
13
neknek mouh

SimpleDateFormat

Ich verwende SimpleDateFormat ohne benutzerdefiniertes Muster , um das aktuelle Datum und die Uhrzeit vom System im dem vorgewählten Gerät Format zu erhalten:

public static String getFormattedDate() {
    //SimpleDateFormat called without pattern
    return new SimpleDateFormat().format(Calendar.getInstance().getTime());
}

kehrt zurück :

  • 13.01.15 11:45
  • 13.1.15 10:45 Uhr
  • ...
8
Tomas

Dies ist meine Methode, Sie können definieren und Eingabe- und Ausgabeformat.

public static String formattedDateFromString(String inputFormat, String outputFormat, String inputDate){
    if(inputFormat.equals("")){ // if inputFormat = "", set a default input format.
        inputFormat = "yyyy-MM-dd hh:mm:ss";
    }
    if(outputFormat.equals("")){
        outputFormat = "EEEE d 'de' MMMM 'del' yyyy"; // if inputFormat = "", set a default output format.
    }
    Date parsed = null;
    String outputDate = "";

    SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, Java.util.Locale.getDefault());
    SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, Java.util.Locale.getDefault());

    // You can set a different Locale, This example set a locale of Country Mexico.
    //SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, new Locale("es", "MX"));
    //SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, new Locale("es", "MX"));

    try {
        parsed = df_input.parse(inputDate);
        outputDate = df_output.format(parsed);
    } catch (Exception e) { 
        Log.e("formattedDateFromString", "Exception in formateDateFromstring(): " + e.getMessage());
    }
    return outputDate;

}
8
Elenasys

Verwenden Sie diese beiden als Klassenvariablen:

 public Java.text.DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
 private Calendar mDate = null;

Und benutze es so:

 mDate = Calendar.getInstance();
 mDate.set(year,months,day);                   
 dateFormat.format(mDate.getTime());
8
user1367623

Verwenden Sie die eingebaute Zeitklasse!

Time time = new Time();
time.set(0, 0, 17, 4, 5, 1999);
Log.i("DateTime", time.format("%d.%m.%Y %H:%M:%S"));
7
Igor Krumpak

Dieser Code würde das aktuelle Datum und die aktuelle Uhrzeit zurückgeben:

public String getCurrDate()
{
    String dt;
    Date cal = Calendar.getInstance().getTime();
    dt = cal.toLocaleString();
    return dt;
}
4
chetan

Dieser Code funktioniert für mich!

Date d = new Date();
    CharSequence s = Android.text.format.DateFormat.format("MM-dd-yy hh-mm-ss",d.getTime());
    Toast.makeText(this,s.toString(),Toast.LENGTH_SHORT).show();
4
Opriday

Die anderen Antworten sind im Allgemeinen korrekt. Ich möchte die moderne Antwort beitragen. Die Klassen Date, DateFormat und SimpleDateFormat, die in den meisten anderen Antworten verwendet wurden, sind längst veraltet und haben vielen Programmierern über viele Jahre Probleme bereitet. Heute haben wir mit Java.time, AKA JSR-310, der modernen Java-Date & Time-API, viel bessere Möglichkeiten. Kannst du das auf Android schon nutzen? Höchstwahrscheinlich! Die modernen Klassen wurden im ThreeTenABP-Projekt nach Android portiert. Siehe diese Frage: Wie man ThreeTenABP in Android Project verwendet für alle Details.

Dieses Snippet soll Ihnen den Einstieg erleichtern:

    int year = 2017, month = 9, day = 28, hour = 22, minute = 45;
    LocalDateTime dateTime = LocalDateTime.of(year, month, day, hour, minute);
    DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
    System.out.println(dateTime.format(formatter));

Wenn ich die bevorzugte Sprache meines Computers auf US-Englisch oder UK-Englisch eingestellt habe, wird Folgendes gedruckt:

Sep 28, 2017 10:45:00 PM

Wenn ich stattdessen Dänisch eingestellt habe, bekomme ich:

28-09-2017 22:45:00

Es folgt also die Konfiguration. Ich bin mir jedoch nicht sicher, in welchem ​​Detail es sich um die Datums- und Uhrzeiteinstellungen Ihres Geräts handelt. Dies kann von Telefon zu Telefon unterschiedlich sein.

4
Ole V.V.

Ich benutze es so:

public class DateUtils {
    static DateUtils instance;
    private final DateFormat dateFormat;
    private final DateFormat timeFormat;

    private DateUtils() {
        dateFormat = Android.text.format.DateFormat.getDateFormat(MainApplication.context);
        timeFormat = Android.text.format.DateFormat.getTimeFormat(MainApplication.context);
    }

    public static DateUtils getInstance() {
        if (instance == null) {
            instance = new DateUtils();
        }
        return instance;
    }

    public synchronized static String formatDateTime(long timestamp) {
        long milliseconds = timestamp * 1000;
        Date dateTime = new Date(milliseconds);
        String date = getInstance().dateFormat.format(dateTime);
        String time = getInstance().timeFormat.format(dateTime);
        return date + " " + time;
    }
}
2
ViliusK

Kürzester Weg:

// 2019-03-29 16:11
String.format("%1$tY-%<tm-%<td %<tR", Calendar.getInstance())

%tR ist die Abkürzung für %tH:%tM, < bedeutet, den letzten Parameter (1$) wiederzuverwenden.

Es ist äquivalent zu String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM", Calendar.getInstance())

https://developer.Android.com/reference/Java/util/Formatter.html

2
k8C

Versuchen:

event.putExtra("startTime", "10/05/2012");

Und wenn Sie auf übergebene Variablen zugreifen:

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(bundle.getString("startTime"));

Zurück zu 2016: Wenn ich das Format anpassen möchte (nicht entsprechend der Gerätekonfiguration, wie Sie fragen ...), verwende ich normalerweise die Zeichenfolgendatei:

in strings.xml:

<string name="myDateFormat"><xliff:g id="myDateFormat">%1$td/%1$tm/%1$tY</xliff:g></string>

In Aktivität:

Log.d(TAG, "my custom date format: "+getString(R.string.myDateFormat, new Date()));

Dies ist auch bei der Veröffentlichung der neuen Date Binding Library nützlich.

So kann ich etwas in der Layoutdatei haben:

<TextView
    Android:id="@+id/text_release_date"
    Android:layout_width="wrap_content"
    Android:layout_height="0dp"
    Android:layout_weight="1"
    Android:padding="2dp"
    Android:text="@{@string/myDateFormat(vm.releaseDate)}"
    tools:text="0000"
    />

Und in der Java-Klasse:

    MovieDetailViewModel vm = new MovieDetailViewModel();
    vm.setReleaseDate(new Date());
1
alexpfx

Vermeiden Sie j.u.Date

Das Java.util.Date und der .Calendar und das SimpleDateFormat in Java (und Android) sind notorisch lästig. Vermeide sie. Sie sind so schlecht, dass Sun/Oracle sie aufgegeben haben und sie durch das neue Java.time-Paket in Java 8 ersetzt haben (nicht in Android ab 2014). Der neue Java.time wurde von der Joda-Time -Bibliothek inspiriert.

Joda-Zeit

Joda-Time funktioniert in Android.

Durchsuchen Sie StackOverflow nach "Joda", um viele Beispiele und Diskussionen zu finden.

Ein Stückchen Quellcode mit Joda-Time 2.4.

Standardformat.

String output = DateTime.now().toString(); 
// Current date-time in user's default time zone with a String representation formatted to the ISO 8601 standard.

Lokalisiertes Format.

String output = DateTimeFormat.forStyle( "FF" ).print( DateTime.now() ); 
// Full (long) format localized for this user's language and culture.
1
Basil Bourque

Die Android Time-Klasse bietet 3 Formatierungsmethoden: http://developer.Android.com/reference/Android/text/format/Time.html

So habe ich es gemacht:

/**
* This method will format the data from the Android Time class (eg. myTime.setToNow())   into the format
* Date: dd.mm.yy Time: hh.mm.ss
*/
private String formatTime(String time)
{
    String fullTime= "";
    String[] sa = new String[2];

    if(time.length()>1)
    {
        Time t = new Time(Time.getCurrentTimezone());
        t.parse(time);
        // or t.setToNow();
        String formattedTime = t.format("%d.%m.%Y %H.%M.%S");
        int x = 0;

        for(String s : formattedTime.split("\\s",2))
        {   
            System.out.println("Value = " + s);
            sa[x] = s;
            x++;
        }
        fullTime = "Date: " + sa[0] + " Time: " + sa[1];
    }
    else{
        fullTime = "No time data";
    }
    return fullTime;
}

Ich hoffe das ist hilfreich :-)

0
Broo

Es ist zu spät, aber es kann jemandem helfen

DateFormat.format(format, timeInMillis);

hier ist format welches Format Sie benötigen

beispiel: "HH: mm" gibt 15:30 zurück

Gebietsschema

Um Datum oder Uhrzeit im Gebietsschema von Millisekunden abzurufen, habe ich Folgendes verwendet:

Datum und Uhrzeit

Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault());
dateFormat.format(date);

Datum

Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.getDefault());
dateFormat.format(date);

Zeit

Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault());
dateFormat.format(date);

Sie können einen anderen Datums- und Zeitstil verwenden. Mehr Infos zu Styles hier .

0
Wojtek