Android'de tarih ve saati nasıl biçimlendiririm?


321

Yıl, ay, gün, saat ve dakika olduğunda cihaz yapılandırma tarih ve saatine göre nasıl doğru biçimlendirilir?

Yanıtlar:


291

Standart Java DateFormat sınıfını kullanın.

Örneğin, geçerli tarih ve saati görüntülemek için aşağıdakileri yapın:

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

Bir Date nesnesini kendi değerlerinizle başlatabilirsiniz, ancak yapıcıların kullanımdan kaldırıldığını ve gerçekten bir Java Calendar nesnesi kullandığınızın farkında olmalısınız.


42
Bu, java.text.DateFormat yerine android.text.format.DateFormat.
jamesh

4
Android IME'nin her ikisinin de varsayılan Yerel Ayar olarak ayarlanmış bir sonuç verdiğini iddia eden iki sınıfın olması oldukça tipiktir, ancak biri yoktur. Yani evet, DateFormat'ın android.text.format sürümünü kullanmayı unutmayın (java.util bir LOL'yi bile türetmez).
mxcl

22
Lütfen bu satırı not edin: DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());Döndürülen dateFormat türü java.text.DateFormat(ve DEĞİL android.text.format.DateFormat)
Arye Rosenstein

2
@Harsha - bu sorunu çözmek için, DateFormat kullanımımı zincirledim, bu yüzden sadece Android sınıfına başvurmam gerekiyor ve bu nedenle belirsiz sınıflar yok. final String dateStr = DateFormat.getDateFormat (this) .format (d); Android'in format () yöntemini kullanabilir ve örneklemek için (IMHO) temiz kod ve bir tane daha az Nesneye sahip olabilirsiniz.
Jerry Brady

23
Bu formatlayıcı belirtilen tarihi değil, sadece tarihi içerir. Bunun yerine aynı paketten DateUtils kullanın, bkz. Stackoverflow.com/questions/2983920/…
Asmo Soinio

203

Kanımca android.text.format.DateFormat.getDateFormat(context)kafam karıştı çünkü bu yöntem - - java.text.DateFormatyerine döndürüyor android.text.format.DateFormat.

Bu nedenle, biçimimi geçerli tarih / saat almak için aşağıdaki gibi parça kodunu kullanın.

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());

Ayrıca, diğer formatları da kullanabilirsiniz. DateFormat takip edin .


21
Yararlı, ancak soru "cihaz yapılandırmasına göre" dedi. Benim için bu, biçim seçimini kodlamak yerine, kullanıcının diline / ülkesine göre seçilen veya doğrudan kullanıcı tarafından seçilen bir formatın kullanılması anlamına gelir.
Chris Boyle

17
Ayrıca, hh:mm:sssize 01:00:0013:00 vereceğini unutmayın, kk:mm:ssalmak için kullanmanız gerekir13:00:00
dnet

2
@ dnet kgünün saati (1-24), yani Hgünün saati (0-23), yani. SS: dd: ss? Bakınız: developer.android.com/reference/java/text/SimpleDateFormat.html
Joony

1
@ Joo no, java.text.SimpleDateFormat( H0-23 aralığında saatlerce bağlandığınız ve saatlerce kullandığınız ) ve android.text.format.DateFormat(cevabın ne olduğu ve k0-23 aralığında saatlerce kullandığı arasında)
dnet

@dnet test ettikten sonra yaklaşık doğru k, ancak, belgeleri DateFormataçıkça belirtmektedir biçim dizeleri kanonik dokümantasyon için, SimpleDateFormat bkz. Çok kafa karıştırıcı. Yoksa bir şey mi kaçırıyorum?
Joony

145

Kullanabilirsiniz DateFormat. Sonuç, telefonun varsayılan Yerel Ayarına bağlıdır, ancak Yerel Ayarı da belirleyebilirsiniz:

https://developer.android.com/reference/java/text/DateFormat.html

Bu bir

DateFormat.getDateInstance().format(date)                                          

FR Yerel Ayar: 3 kasım. 2017

ABD / Çevre: 12 Oca 1952


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

FR Yerel ayar: 03/11/2017

ABD / Yerel Ayar: 12.13.52


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

FR Yerel Ayar: 3 kasım. 2017

ABD / Çevre: 12 Oca 1952


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

FR Yerel Ayarlar: 3 Kasım 2017

ABD / Yerel Bölge: 12 Ocak 1952


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

FR Yerel Ayar: vendredi 3 kasım 2017

ABD / Çevre: 12 Nisan 1952 Salı


DateFormat.getDateTimeInstance().format(date)

FR Yerel Ayar: 3 kasım. 2017 16:04:58


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

FR Yerel ayar: 03/11/2017 16:04


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

FR Yerel ayar: 03/11/2017 16:04:58


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

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


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

FR Yerel ayar: 03/11/2017 16:04:58 heure normale d'Europe centrale


DateFormat.getTimeInstance().format(date)

FR Yerel ayar: 16:04:58


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

FR Yerel ayar: 16:04


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

FR Yerel ayar: 16:04:58


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

FR Yerel ayar: 16:04:58 GMT + 01: 00


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

FR Yerel ayar: 16:04:58 heure normale d'Europe centrale



4
Tüm bu davaları tek bir yere koyduğunuz için teşekkür ederiz. Vakaları yalnızca zaman için de ekleyebiliyorsanız, bu tam bir referans olacaktır.
zeeshan

41

Tarih - Yerel Tarih tarih dizesi:

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

Seçenekler:

   DateFormat.getDateInstance() 

-> 31 Ara 1969

   DateFormat.getDateTimeInstance() 

-> 31 Aralık 1969 16:00:00

   DateFormat.getTimeInstance() 

-> 16:00:00


3
DateFormat.getDateInstance () 'dan yıl nasıl kaldırılır?
Hardik Joshi

21

Bunu yapacak:

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

Kullanıcı bir android cihazda dili değiştirdiğinde bu yerelleştirilecek mi?
Kannan_SJD

14

SimpleDateFormat Kullan

Bunun gibi:

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

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

5
Evet, performans sorunlarını önlemek için varsayılan yerelnew SimpleDateFormat("my-format", Locale.getDefault());
ayarla

14

Bunu takiben: http://developer.android.com/reference/android/text/format/Time.html

Android yerel Zaman sınıfını kullanmak daha iyidir:

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

Sonra biçimlendirin:

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

1
@FireZenk: Sağladığınız [link] 'e ( developer.android.com/reference/android/text/format/Time.html ) göre: Bu sınıfın bir takım sorunları var ve bunun yerine GregorianCalendar kullanılması önerilir .
ccpizza

Oh ... bu konu bilgisi benim
yorumumdan

10

Bu ikisini sınıf değişkenleri olarak kullanın:

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

Ve şu şekilde kullanın:

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

9

Bu benim yöntemim, giriş ve çıkış formatı tanımlayabilir ve belirleyebilirsiniz.

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

SimpleDateFormat

Aygıttan önceden seçilmiş biçimde sistemden gerçek tarih ve saati almak için SimpleDateFormat'ı özel desen olmadan kullanıyorum :

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

döner :

  • 13.01.15 11:45
  • 13.01.2015 10:45
  • ...


5

Diğer cevaplar genellikle doğrudur. Modern cevaba katkıda bulunmak istiyorum. Sınıflar Date, DateFormatve SimpleDateFormatdiğer cevapların çoğunda kullanılan, uzun modası geçmiş olan ve uzun yıllar boyunca birçok programcılar için sorun neden olmuştur. Bugün java.time, modern Java tarih ve saat API'sı AKA JSR-310'da çok daha iyi var . Bunu henüz Android'de kullanabilir misiniz? Kesinlikle! Modern sınıflar ThreeTenABP projesinde Android'e aktarıldı. Bu soruya bakın : Tüm ayrıntılar için ThreeTenABP'yi Android Project'te kullanma .

Bu snippet'inizi başlatmanız gerekir:

    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));

Bilgisayarımın tercih ettiği dili ABD İngilizcesi veya İngiltere İngilizcesi olarak ayarladığımda, bu yazdırılır:

Sep 28, 2017 10:45:00 PM

Bunun yerine Danimarkaca ayarladığımda şunu alıyorum:

28-09-2017 22:45:00

Böylece konfigürasyonu takip eder. Bununla birlikte, cihazınızın tarih ve saat ayarlarının hangi ayrıntıya uyduğundan tam olarak emin değilim ve bu telefondan telefona değişebilir.


5

Bu kod benim için çalışıyor!

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();

5

Tarih formatı sınıf tarih yapmak için hile kodu ile çalışır. Sevmek

  1. M -> 7, MM -> 07, MMM -> Temmuz, MMMM -> Temmuz
  2. EEE -> Sal, EEEE -> Salı
  3. z -> EST, zzz -> EST, zzzz -> Doğu Standart Saati

Burada daha fazla hile kontrol edebilirsiniz .


4

Bu kod geçerli tarih ve saati döndürür:

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

1
toLocaleString () kullanımdan kaldırıldı
nspo

4

yerel

Tarih veya saati milisaniyeden yerel ayar biçiminde almak için bunu kullandım:

Tarih ve saat

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

tarih

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

zaman

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

Diğer tarih stillerini ve saat stillerini kullanabilirsiniz. Burada stiller hakkında daha fazla bilgi .



2

Deneyin:

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

Ve geçirilen değişkenlere erişirken:

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

2

Ben böyle kullanın:

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;
    }
}

1

JuDate'den kaçının

Java (ve Android) içindeki Java.util.Date ve .Calendar ve SimpleDateFormat çok zahmetlidir. Onlardan kaçının. Sun / Oracle'ın onlardan vazgeçmesi çok kötü, Java 8'deki yeni java.time paketiyle (2014'ten itibaren Android'de değil) onları tamamladılar. Yeni eseri Joda-Time kütüphanesinden java.timeilham aldı .

Joda-Time

Joda-Time Android'de çalışıyor.

Birçok örnek ve çok tartışma bulmak için StackOverflow "Joda" için arama.

Joda-Time 2.4 kullanarak bir kaynak kodu.

Standart boyut.

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

Yerelleştirilmiş biçim.

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

1

2016'ya dön, Biçimi özelleştirmek istediğimde (istediğiniz gibi aygıt yapılandırmasına göre değil ...) Genellikle dize kaynak dosyasını kullanırım:

strings.xml dosyasında:

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

Faaliyette:

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

Bu, yeni Tarih Bağlama Kitaplığı'nın yayınlanması için de yararlıdır .

Yani düzen dosyasında böyle bir şey olabilir:

<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"
    />

Ve java sınıfında:

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

0

Android Time sınıfı 3 biçimlendirme yöntemi sunar http://developer.android.com/reference/android/text/format/Time.html

Ben böyle yaptım:

/**
* 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;
}

Umarım bu yararlı :-)


0

Çok geç ama birisine yardımcı olabilir

DateFormat.format(format, timeInMillis);

işte formathangi formata ihtiyacın var

ör .: "SS: dd", 15:30 değerini döndürür

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.