Android'de şu anki tarihi nasıl alabilirim?


165

Aşağıdaki kodu yazdım

Date d = new Date();
CharSequence s  = DateFormat.format("MMMM d, yyyy ", d.getTime());

Ama bana parametre soruyor, ben dize formatında güncel tarih istiyorum,

sevmek

28-Dec-2011

böylece yerleşebilirim TextView,

biraz açıklayın, bir şeyin gerekli olduğunu düşünüyorsanız, Android Geliştirme konusunda yeniyim.


1
Kullanırken DateFormatbu soru 2011 yılında sorulduğunda sınıf Tamam oldu, o sınıf ve alt sınıf SimpleDateFormather zaman zahmetli ve şimdi uzun güncelliğini yitirmiş durumda. Bunları kullanmamanızı ve bunun yerine modern Java tarih ve saat API'sini java.time'a bakmanızı öneririm .
Ole VV

Yanıtlar:


389

SimpleDateFormatSınıfı tarihi istediğiniz formatta biçimlendirmek için kullanabilirsiniz .

Örneğiniz için bir fikir edinebileceğiniz bu bağlantıyı kontrol etmeniz yeterlidir.

Örneğin:

String dateStr = "04/05/2010"; 
 
SimpleDateFormat curFormater = new SimpleDateFormat("dd/MM/yyyy"); 
Date dateObj = curFormater.parse(dateStr); 
SimpleDateFormat postFormater = new SimpleDateFormat("MMMM dd, yyyy"); 
 
String newDateStr = postFormater.format(dateObj); 

Güncelleme:

Ayrıntılı örnek burada , bu örneği incelemenizi ve SimpleDateFormat sınıfı kavramını anlamanızı öneririm.

Son çözüm:

Date c = Calendar.getInstance().getTime();
System.out.println("Current time => " + c);

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy", Locale.getDefault());
String formattedDate = df.format(c);

Calendar sınıfı için System.currentTimeMillis () yöntemini veya Data sınıfını kullanmak isteyebilirsiniz. Daha hızlı olmalı. stackoverflow.com/questions/368094/…
cjayem13

Bu API 24 gerektirir!
ueen

Bilginize gibi korkunç zahmetli tarih-saat sınıfları java.util.Date, java.util.Calendarve java.text.SimpleDateFormatşimdi mirası supplanted, java.time sonra Java 8 ve yerleşik sınıflara. Oracle'ın Öğreticisine bakın .
Basil Bourque

@ueen Lütfen android'den değil java paketinden içe aktarın.
Sadda Hussain

Para cezaları çalışıyor mu? Şu anda? (2020)
Luke Cross

152

Bu yyyy-AA-gg biçiminde geçerli Tarih almak için basit bir satır kodu istediğiniz biçimini kullanabilirsiniz:

String date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date());

7
Bunu şu şekilde değiştirmelisiniz: String currentDate = new SimpleDateFormat ("dd-AA-yyyy", Locale.getDefault ()). Format (new Date ());
Bart Burg

1
Vay canına, teşekkür ederim! Bu işe yaradı, ancak sanal cihazımdaki tarihin neden bir gün önce gösterildiğine inanmış olmama rağmen, muhtemelen sanal makinedeki tarih doğru değildi. Gerçek bir telefonda test edildiğinde harikalar yarattı. Yani size @Pratik teşekkür
wesley Franks

30

Bu java tabanlı olduğu için android ile ilgisi yoktur, böylece kullanabilirsiniz

private String getDateTime() { 
   DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
   Date date = new Date(); 
   return dateFormat.format(date); 
}

Hatalar var, yeni Date () bağımsız değişkenler istiyor ve DateFormat'ı SimpleDateFormat ile başlatıyorsunuz, ayrıca geçerli değil
Chatar Veer Suthar

12
 public String giveDate() {
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("EEE, MMM d, yyyy");
    return sdf.format(cal.getTime());
 }

11

bunu dene,

SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmssSS");
Date myDate = new Date();
String filename = timeStampFormat.format(myDate);

yeni Tarihe (uzun) tartışmalar
ekliyor

yeni Date'de () uzun parametre istenemez.
Lucifer

Neden özel anahtar işi kullanıyor, kodunuzu android projede çalıştırıyorsunuz, çıktıyı alıyor musunuz?
Chatar Veer Suthar

lütfen "özel" i kaldırın. evet çıktıyı alıyorum, tartışmanızı görüyorum. Çok basit bir soru için neden sorun yaşadığınızı bilmiyorum.
Lucifer


7

Bir cazibe gibi çalışır ve bonus olarak String'e dönüştürür;)

SimpleDateFormat currentDate = new SimpleDateFormat("dd/MM/yyyy");
      Date todayDate = new Date();
    String thisDate = currentDate.format(todayDate);

5
 String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());

// Date sınıfını java.util olarak içe aktar


4

Aşağıdaki kod hem saati hem de tarihi gösterir

Calendar cal = Calendar.getInstance();
cal.getTime().toString();

4
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String date = df.format(Calendar.getInstance().getTime());

4

Modern cevabı veriyorum.

java.time ve ThreeTenABP

Geçerli tarihi almak için:

    LocalDate today = LocalDate.now(ZoneId.of("America/Hermosillo"));

Bu size bir LocalDatenesne verir , bu da programınızda bir tarih tutmak için kullanmanız gereken şeydir. A LocalDate, günün saati olmayan bir tarihtir.

Yalnızca tarihi bir kullanıcıya görüntülemeniz gerektiğinde, kullanıcının yerel ayarına uygun bir dizeye biçimlendirin:

    DateTimeFormatter userFormatter
            = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
    System.out.println(today.format(userFormatter));

Bu snippet'i bugün ABD İngilizcesi'nde çalıştırdığımda çıktı:

13 Temmuz 2019

Daha kısa olmasını istiyorsanız, FormatStyle.MEDIUMhatta belirtin FormatStyle.SHORT. DateTimeFormatter.ofLocalizedDatevarsayılan biçimlendirme yerel ayarını kullanır, bu nedenle önemli olan, farklı yerel ayarlar için farklı, bu yerel ayar için uygun çıktılar vermesidir.

Kullanıcınızın çıktı biçimi için çok özel gereksinimleri varsa, bir biçim deseni dizesi kullanın:

    DateTimeFormatter userFormatter = DateTimeFormatter.ofPattern(
            "d-MMM-u", Locale.forLanguageTag("ar-AE"));

13-يول -2019

Java Java, modern Java tarih ve saat API'sini kullanıyorum ve tavsiye ediyorum. DateFormat, SimpleDateFormat, DateVe Calendarsöz konusu kullanılan ve / veya diğer cevapların birçoğu, kötü tasarlanmış ve uzun modası geçmiş edilir. Ve java.time ile çalışmak çok daha güzel.

Soru: Android'de java.time kullanabilir miyim?

Evet, java.time eski ve yeni Android cihazlarda güzel çalışıyor. Sadece en az Java 6 gerektirir .

  • Java 8 ve sonraki sürümlerde ve daha yeni Android cihazlarda (API düzey 26'dan) modern API yerleşik olarak gelir.
  • Java 6 ve 7'de modern sınıfların arka havuzu olan ThreeTen Backport'u edinin (JSR 310 için ThreeTen; alttaki bağlantılara bakın).
  • (Daha eski) Android cihazlarında ThreeTen Backport'un Android sürümünü kullanın. Buna ThreeTenABP deniyor. Ve tarih ve saat sınıflarını org.threeten.bpalt paketlerle aldığınızdan emin olun .

Bağlantılar


Çok iyi cevap! Ancak ThreeTen LocalDateTime'ı Tarihe nasıl dönüştürebilirim? Firebase kullanıyorum ve zaman damgası kaydetmek için bir ön koşul Date nesnesidir.
H.Karatsanov

H.Karatsanov Eğer backport kullanarak @: DateTimeUtils.toDate(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). Yerleşik java.time kullanılıyorsa: Date.from(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). Bkz . Java.time.LocalDateTime ve java.util.Date arasında dönüştürme . JodaStephen'in yetkili yanıtı ve ayrıca backport kullanımını gösteren bir cevap var .
Ole VV

4
 public static String getcurrentDateAndTime(){

        Date c = Calendar.getInstance().getTime();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
        String formattedDate = simpleDateFormat.format(c);
        return formattedDate;
    }

// String currentdate=  getcurrentDateAndTime();

Diğer cevaplarda olmayan soruya ( dize biçiminde güncel tarih istiyorum28-Dec-2011 ) önemli bir şey katıyor mu? Her durumda, meşhur zahmetli ve uzun süredir modası geçmiş SimpleDateFormatsınıfı kullanıyor. Lütfen bunu yapmak için başka cevaba ihtiyacımız yok.
Ole VV

en iyi uygulama için çalışıyor ikinci parametre yerel ayarını ekleyin SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy / MM / dd", Locale.ENGLISH);
Rucha Bhatt Joshi

3
Calendar cal = Calendar.getInstance();      
Calendar dt = Calendar.getInstance(); 
dt.clear();
dt.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),cal.get(Calendar.DATE)); 
return dt.getTime();        

3

Paresh'in çözümüne basit bir değişiklik:

Date date = Calendar.getInstance().getTime();
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(date);

3
Calendar c = Calendar.getInstance();
int day = c.get(Calendar.DAY_OF_MONTH);
int month = c.get(Calendar.MONTH);
int year = c.get(Calendar.YEAR);
String date = day + "/" + (month + 1) + "/" + year;

Log.i("TAG", "--->" + date);

2

İstediğiniz biçimde bir tarih almak için aşağıdaki kodu kullanabilirsiniz.

String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date()));

Güzel bir astar ve alt Sdks üzerinde çalışır. Birkaç karakter daha kısa DateFormat.format ("dd-AA-yyyy", yeni java.util.Date ()). ToString ()
Jeffrey

1
Date c = Calendar.getInstance().getTime();
System.out.println("Current time => " + c);

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(c);

Bu en iyi cevap ...


0

Geçerli tarihi geçerli yerel ayarda almanın en basit yolu (cihaz yerel ayarı!):

String currentDate = DateFormat.getDateInstance().format(Calendar.getInstance().getTime());

Tarihin farklı stillere sahip olmasını istiyorsanız getDateInstance(int style):

DateFormat.getDateInstance(DateFormat.FULL).format(Calendar.getInstance().getTime());

Diğer stilleri: DateFormat.LONG, DateFormat.DATE_FIELD, DateFormat.DAY_OF_YEAR_FIELDvb (kullanımCTRL+Space hepsini görmek için)

Zamana da ihtiyacınız varsa:

String currentDateTime = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,DateFormat.LONG).format(Calendar.getInstance().getTime());

0
  public static String getDateTime() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMMM dd, yyyy HH:mm:ss", Locale.getDefault());
        Date date = new Date();
        return simpleDateFormat.format(date);
    }

0

Bu kod bağlantısını deneyin, bu tarih ve saatteki tüm durumlar için mutlak doğru cevaptır. veya uygulamanın ihtiyaç ve gereksinimlerine göre tarih ve saati özelleştirin.

bu bağlantı ile deneyin. bu bağlantıyla dene


0

CalendarView kullanarak takvim uygulaması yazdım ve bu benim kodum:

CalendarView cal = (CalendarView) findViewById(R.id.calendar);
cal.setDate(new Date().getTime());

'takvim' alanı benim CalendarView'ım. İthalat:

import android.widget.CalendarView;
import java.util.Date;

Güncel tarihim hatasız.


0

Ben kullanılan kod budur:

             Date date = new Date();  // to get the date
             SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy"); // getting date in this format
             String formattedDate = df.format(date.getTime());
             text.setText(formattedDate);

0

Bunu zaten kullandım:

Date What_Is_Today=Calendar.getInstance().getTime();
SimpleDateFormat Dateformat = new SimpleDateFormat("dd-MM-yyyy");
String Today=Dateformatf.format(What_Is_Today);

Toast.makeText(this,Today,Toast.LENGTH_LONG).show();

Önce zaman alırım, sonra basit bir tarih biçimi (tarih gibi almak için: 19-6-2018) ilan ettim ve sonra tarihi dizeye değiştirmek için biçimi kullanıyorum.


0

basit Tarih formatı elde etmek için sadece bir satır kodu:

SimpleDateFormat.getDateInstance().format(Date())

çıktı: 18-Mayıs-2020

SimpleDateFormat.getDateTimeInstance().format(Date())

çıktı: 18-Mayıs-2020 11:00:39

SimpleDateFormat.getTimeInstance().format(Date())

çıktı : 11:00:39

Umarım bu cevap bu Tarih ve Saat Formatını almak için yeterlidir ... :)


Lütfen gençlere uzun süredir eskimiş ve kötü şöhretli SimpleDateFormatve DateFormatsınıfları kullanmayı öğretmeyin . En azından ilk seçenek olarak değil. Ve herhangi bir rezervasyon olmadan. Bugün java.time, modern Java tarih ve saat API'sı ve onun çok daha iyi var DateTimeFormatter. Evet, Android'de kullanabilirsiniz. Daha eski Android için bkz . Android Project'te ThreeTenABP nasıl kullanılır .
Ole VV

-1

Bu kullandığım kod :

final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);

// Set current date into textview
tvDisplayDate.setText(new StringBuilder()
    .append(month + 1).append("-") // Month is 0 based, add 1
    .append(day).append("-")
    .append(year).append("   Today is :" + thursday ) );

// Set current date into datepicker
dpResult.init(year, month, day, null);
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.