Android'de şu anki saat ve tarih nasıl alınır?


1108

Bir Android uygulamasında geçerli saati ve tarihi nasıl alabilirim?


3
43 cevaplar! Birçoğu yazıldıklarında iyi olsa da, 2018'de kullanmak için iyi cevap burada .
Ole VV

Yanıtlar:


1310

Kullanabilirsin:

import java.util.Calendar

Date currentTime = Calendar.getInstance().getTime();

Takvim'de ihtiyacınız olan her şey için bol miktarda sabit vardır.

Düzenle: Takvim sınıfı belgelerini
kontrol edin


14
+1 Bu çok yardımcı oldu. Yeni olmak için ihtiyacımız olan bu küçük ipuçları ... Julian tarihini almak için Takvim kullanıyorum. Milisaniye elde etmek ve değerin bugün eşit olup olmadığını anlamaktan çok daha kolay;)
Bill Mote

9
Fakat bu tarih ve saati nereden alıyor? android cihaz kendisi ayarı?
Kyle Clegg

12
@Kyle Evet, cihaz saat ayarlarına / saat dilimine dayanır. Dan alıntı doc : "Takvim'in getInstance metot bize kimin yerel dayanan bir takvim sistem ayarları artık zamanı alanlar geçerli tarih ve saat ile başlatıldı ve" - (sınıf belgelerinde ilk SampleCode çizgisinin üzerinde).

3
+1 bu çözüm milisaniye hassasiyete sahiptir, tam da ihtiyacım olan şey.
Igor Zelaya

42
@Adamdport'un dediği gibi, bu aslında soruyu cevaplamıyor ... Calendar.getInstance().getTime()ya Calendar.getInstance().getTimeInMillis()da işe yarayacak.
akousmata

487

Sen olabilir ( ama artık gerekir - aşağıya bakınız!) Kullanmak android.text.format.Time :

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

Yukarıda bağlantılı referanstan:

Time sınıfı, java.util.Calendar ve java.util.GregorianCalendar sınıflarının daha hızlı bir alternatifidir. Time sınıfının bir örneği, ikinci hassasiyetle belirtilen bir anı temsil eder.


NOT 1: Bu yanıtı yazmamın üzerinden birkaç yıl geçti ve eski, Android'e özgü ve şimdi kullanımdan kaldırılmış bir sınıfla ilgili. Google şimdi diyor "[t] onun sınıf sorunların bir numarası vardır ve tavsiye edilir GregorianCalendar yerine kullanılan".


NOT 2:Time Sınıfın bir toMillis(ignoreDaylightSavings)yöntemi olmasına rağmen , bu yalnızca milisaniye cinsinden zaman bekleyen yöntemlere geçmek için bir kolaylıktır. Zaman değeri sadece bir saniyedir ; milisaniye bölümü her zaman 000. Eğer bir döngü içinde yaparsanız

Time time = new Time();   time.setToNow();
Log.d("TIME TEST", Long.toString(time.toMillis(false)));
... do something that takes more than one millisecond, but less than one second ...

Ortaya çıkan dizi 1410543204000, bir sonraki saniye 1410543205000başlayana kadar tekrarlanmaya başlayacağı gibi aynı değeri tekrarlayacaktır.


2
@InsanityOnABun ve Muhammad Babar. Hayır hayır hayır. Dokümanlar "ikinci hassasiyetle belirtildi" diyor En basit test bile (bir döngüde şimdiki zamanı almak, toMillis ve sonucu günlüğe kaydetmek / yazdırmak), ortaya çıkan sürenin milisaniye kısmı olarak 000 olduğunu gösterecektir!
ToolmakerSteve

3
@IgorZelaya Milisaniye doğruluk istiyorsanız, muhtemelen günün saati yerine aralık zamanlaması yapıyorsunuzdur . Android dokümanlar SystemClock.uptimeMillis()aralıklı zamanlama için önerilir . En yerleşik işlevlerin kullandığı bu olduğundan, tüm cihazlarda iyi uygulanması için güçlü bir motivasyon vardır. SystemClock'taki tartışmaya bakın ... Bunu günün saati ile ilişkilendirmek istiyorsanız, uygulamanın onResume öğesinde, bunu ve Time / setToNow / toMillis'i okuyun. Bunlar arasındaki farkı hatırlayın.
ToolmakerSteve

Time sınıfını kullanmayın . Gelecekte kaldırılacak ve bununla ilgili birçok sorun var.
Sandy Chapman

1
> Bu sınıf API 22 düzeyinde kullanımdan kaldırıldı. Bunun yerine GregorianCalendar öğesini kullanın. Buraya
Neo

Aslında, GregorianCalendaryıllar önce Java'da ve daha sonraki Android'de java.time sınıfları tarafından özellikle desteklendi ZonedDateTime. Daha önceki Android için ThreeTen-Backport ve ThreeTenABP projelerine bakın.
Basil Bourque

366

Tarih ve saati belirli bir düzende almak istiyorsanız aşağıdakileri kullanabilirsiniz:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());

Veya,

Tarih :

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

Zaman:

String currentTime = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());

Bu UTC zaman verecektir, zaman dilimleri benimsemelidir.
Andras Balázs Lajtha

10
Performans bir sorunsa SimpleDateFormat sorunlu olabilir. Uygulamamda, belirli saatleri (milisaniye tutan uzun tamsayılar) ve eşit sayıda çekilebilir kaynağı temsil eden yaklaşık 20 HH: MM etiketine sahip özel bir görünüm vardı. İlk testler etkileşimin istediğim kadar akıcı olmadığını gösterdi. Ben onDraw () profilli zaman SimpleTimeFormatter çağrıları% 80 zaman alıyordu bulundu. Aslında, bu sayfayı daha verimli bir biçimlendirici arayışı ve Takvimler vb. Hakkında daha fazla bilgi edinmek için okuyorum
William T. Mallard

3
Evet, ama artık değil. Genel giderlerin farkında değildim ve hemen hemen bir POJO olduğunu varsaymıştım.
William T. Mallard

32
Kısacası:String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Pratik Butani

4
Eğer ekleyebilirsiniz sdf.setTimeZone(TimeZone.getDefault())ortada
Harvey

231

Özelleştirilmiş bir biçimi tercih etmeyi tercih edenler için şunları kullanabilirsiniz:

DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm");
String date = df.format(Calendar.getInstance().getTime());

Oysa DateFormat kalıplarına sahip olabilirsiniz:

"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01

126

Aslında, cihazda ayarlanan geçerli saat dilimini ile ayarlamak daha güvenlidir Time.getCurrentTimezone(), yoksa geçerli saati UTC olarak alırsınız.

Time today = new Time(Time.getCurrentTimezone());
today.setToNow();

Ardından, istediğiniz tüm tarih alanlarını alabilirsiniz, örneğin:

textViewDay.setText(today.monthDay + "");             // Day of the month (1-31)
textViewMonth.setText(today.month + "");              // Month (0-11)
textViewYear.setText(today.year + "");                // Year 
textViewTime.setText(today.format("%k:%M:%S"));  // Current time

Bkz. Android.text.format.Time ayrıntılar için sınıfına bakın.

GÜNCELLEME

Birçok kişinin işaret ettiği gibi, Google bu sınıfın bir takım sorunları olduğunu ve artık kullanılmaması gerektiğini söylüyor:

Bu sınıfın bir takım sorunları vardır ve bunun yerine GregorianCalendar kullanılması önerilir.

Bilinen Sorunlar:

Tarihsel nedenlerden dolayı zaman hesaplamaları yapılırken, tüm aritmetik şu anda 32 bit tamsayılar kullanılarak yapılmaktadır. Bu, 1902'den 2037'ye kadar temsil edilebilen güvenilir zaman aralığını sınırlar. Ayrıntılar için 2038 Yılı problemindeki wikipedia makalesine bakın. Bu davranışa güvenmeyin; gelecekte değişebilir. DST geçişi nedeniyle atlanan bir duvar saati gibi var olmayan bir tarihte switchTimezone (String) çağrılması 1969'da bir tarihle sonuçlanır (örneğin 1 Ocak 1970 UTC'den önce -1 veya 1 saniye). Biçimlendirme / ayrıştırma işlemlerinin çoğu ASCII metnini üstlenir ve bu nedenle ASCII olmayan komut dosyalarıyla kullanım için uygun değildir.


Hangi paketten zaman alınmalı?
ManishSB

Bu sınıf API 22 düzeyinde kullanımdan kaldırıldı. Bunun yerine GregorianCalendar'ı kullanabiliriz.
Choletski

78

Geçerli tarih ve saat için şunu kullanın:

String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());

Hangi çıktılar:

Feb 27, 2012 5:41:23 PM

Sistemin geçerli tarih, gün ve saat var ama zaman değişmiyor. i saniye saniye saniye artırmak için wnat. nasıl yapabilirim?
Bhavesh Hirpara

2
Android API'ye göre bunu yapmanın önerilen yolu budur: developer.android.com/reference/java/text/… Teşekkürler!
M Granja

58

Bu şekilde deneyin Tarih ve saat biçimini almak için tüm biçimler aşağıda verilmiştir.

    Calendar c = Calendar.getInstance();
    SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aa");
    String datetime = dateformat.format(c.getTime());
    System.out.println(datetime);

ilk

ikinci üçüncü


53

tl; Dr.

Instant.now()  // Current moment in UTC.

…veya…

ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )  // In a particular time zone

ayrıntılar

Diğer Yanıtlar, doğru olsa da güncelliğini yitirmiştir. Eski tarih-saat sınıflarının kötü tasarlanmış, kafa karıştırıcı ve zahmetli olduğu kanıtlanmıştır.

java.time

Bu eski sınıflar java.time çerçevesi tarafından desteklenmiştir .

Bu yeni sınıflar, JSR 310 tarafından tanımlanan ve ThreeTen-Extra projesi tarafından genişletilen son derece başarılı Joda-Time projesinden esinlenmiştir .

Oracle Eğiticisine bakın .

Instant

Bir Instantde zaman çizelgesi üzerinde bir andır UTC için çözünürlüğe kadar olan nanosaniye .

 Instant instant = Instant.now(); // Current moment in UTC.

Saat dilimi

Bir saat dilimi ( ZoneId)ZonedDateTime . Saat dilimini atlarsanız, JVM'nizin geçerli varsayılan saat dilimi örtülü olarak uygulanır. İstenen / beklenen saat dilimini açıkça belirtmek daha iyidir.

Kullanım uygun bir zaman dilimi isimleri formatında continent/regiongibi America/Montreal, Europe/Brusselsya da Asia/Kolkata. Hiçbir zaman gibi 3-4 harfli kısaltmalar kullanmayın ESTveya ISTonlar ne standardize ne de benzersiz gibidir.

ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

Java'da hem modern hem de eski tarih-saat türleri tablosu

Dizeler Oluşturma

Kolayca bir String tarih-saat değerinin metinsel bir temsili olarak . Standart bir biçim, kendi özel biçiminiz veya otomatik olarak yerelleştirilmiş bir biçim ile gidebilirsiniz.

ISO 8601

toStringOrtak ve makul ISO 8601 standardını kullanarak biçimlendirilmiş metin alma yöntemlerini çağırabilirsiniz .

String output = instant.toString();

2016-03-23T03: 09: 01.613Z

Bunun için ZonedDateTime, toStringyöntemin zaman diliminin adını köşeli parantez içine alarak ISO 8601 standardını genişlettiğini unutmayın . Son derece yararlı ve önemli bilgiler, ancak standart değil.

2016-03-22T20: 09: 01.613-08: 00 [tane /]

Özel biçim

Veya DateTimeFormattersınıfla kendi biçimlendirme deseninizi belirtin .

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );

Gün / ay adını çevirirken ve ayrıca yıl, ay ve tarih sırası gibi kültürel normların tanımlanmasında kullanılacak Localebir insan dili (İngilizce, Fransızca , vb.) Belirtin . Bunun Localesaat dilimi ile ilgisi olmadığını unutmayın .

formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );

yerelleştirme

Daha da iyisi, java.time öğesinin otomatik olarak yerelleştirme işlemini yapmasına izin verin.

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String output = zdt.format( formatter.withLocale( Locale.US ) );  // Or Locale.CANADA_FRENCH and so on.

Hakkında java.time

Java.time çerçevesi daha sonra Java 8 ve yerleşiktir. Bu sınıflar zahmetli eski yerini mirası gibi tarih-saat sınıfları java.util.Date, Calendar& SimpleDateFormat.

Artık bakım modunda olan Joda-Time projesi java.time'a geçişi tavsiye ediyor sınıflarına .

Daha fazla bilgi için Oracle Eğiticisine bakın . Ve birçok örnek ve açıklama için Stack Overflow'da arama yapın. Spesifikasyon JSR 310'dur .

Sen değiştirebilir java.time sizin veritabanı ile doğrudan nesneleri. JDBC 4.2 veya sonraki bir sürümüyle uyumlu bir JDBC sürücüsü kullanın . Dizeye gerek yok, gerek yokjava.sql.* sınıflara .

Java.time sınıflarını nereden edinebilirsiniz?

Hangi Java ve Android sürümlerinde kullanılacak * java.time * teknolojisinin uygulanacağını listeleyen tablo.


2
@ giraffe.guru Cevabımı tekrar oku. Üçüncü mermiyi kaçırdın. Çok java.time işlevselliği Java 6 ve 7 geri-taşındıktan ThreeTen-backport ve ayrıca içinde Android'e uyarlanmıştır ThreeTenABP .
Basil Bourque

Instant.now()ve ZonedDateTime.now()gereklidir API 26
Ryde

2
@Ryde Giraffe.guru'ya söylediğim gibi, cevabımı tekrar oku. "Android" den söz eden üçüncü madde işaretini arayın.
Basil Bourque

Haklı olduğuna inanıyorum: yeni java.time sürüm tablonuz, mesajı bir madde işaret listesinden daha doğrudan ve kolay bir şekilde iletir. Eğer ben olsaydım, konuları biraz daha karmaşık hale getireceğim ve ThreeTenBackport / Java 8+ altında ve ayrıca ThreeTenABP / Android 26+ altında parantez içine bir onay işareti koyacağımı düşünüyorum, sadece bu değil genellikle onları kullanmanın herhangi bir anlamı yoktur. ThreeTenABP kullanan ve hem seviye hem de alt düzeydeki bir dizi Android API seviyesini hedefleyen Android uygulamaları geliştirilmektedir. Bana öyle geliyor ki, geliştiriciler bu gibi durumlarda iyi seçim yapıyor.
Ole VV

1
@ OleV.V. Grafik tablosunda ikincil bir onay işareti önerdiğiniz için teşekkür ederiz. Bunu tablonun sonraki sürümlerinde kullanıyorum. Çok gelişti.
Basil Bourque

52

Geçerli saati belirlemek System.currentTimeMillis()için Java'da standart olanı kullanabilirsiniz . Sonra bir tarih oluşturmak için kullanabilirsiniz

Date currentDate = new Date(System.currentTimeMillis());

Ve zaman yaratmak için başkaları tarafından da belirtildiği gibi

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

13
Gerek yok System.currentTimeMillis(); sadece new Date() aynı şeyi yapar .
Jonik

@Jonik Cannot resolve constructor Date()Android, Android SDK Java 6 ve 7 karışımı kullanır
surfer190

1
Teşekkür ederim. Date currentDate = new Date(System.currentTimeMillis());doğru
mghhgm

@mghhgm Hayır, new Date(System.currentTimeMillis())doğru değil: (a) gereksizdir, çünkü tam olarak aynıdır new Date(). (b) Sorun java.util.Dateyaratan sınıfın yerini java.time.InstantJava 8 ve sonraki sürümler almıştır. ThreeTen-Backport projesinde Java 6 ve 7'ye ve ThreeTenABP'deki önceki Android'e (<26) geri taşındı .
Basil Bourque

37

Kodu kullanabilirsiniz:

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());

Çıktı:

2014-11-11 00:47:55

Ayrıca için biraz daha biçimlendirme seçenekleri almak SimpleDateFormatden buraya .


Bilginize, gibi zahmetli eski 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

32

Kolay, geçerli zaman için ayrı değerler elde etmek için zamanı aşağıdaki gibi kesebilirsiniz:

Calendar cal = Calendar.getInstance(); 

  int millisecond = cal.get(Calendar.MILLISECOND);
  int second = cal.get(Calendar.SECOND);
  int minute = cal.get(Calendar.MINUTE);
        //12 hour format
  int hour = cal.get(Calendar.HOUR);
        //24 hour format
  int hourofday = cal.get(Calendar.HOUR_OF_DAY);

Aynı tarih için de geçerlidir:

Calendar cal = Calendar.getInstance(); 

  int dayofyear = cal.get(Calendar.DAY_OF_YEAR);
  int year = cal.get(Calendar.YEAR);
  int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
  int dayofmonth = cal.get(Calendar.DAY_OF_MONTH);

önümüzdeki 5-10 gün için tarih nasıl alabilirim .. burada manuel hesaplama var mı?
CoDe

@CoDe Bunun için Tarih kullanıyorsunuz
FindOutIslamNow

27

Android esas olarak Java olduğu için birkaç seçenek var, ancak bir textView'de yazmak isterseniz, aşağıdaki kod işe yarayacaktır:

String currentDateTimeString = DateFormat.getDateInstance().format(new Date());

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);

8
Sen kullanmalısınız Calendarveya GregorianCalendar. DateSınıf kaldırılmıştır.
Joseph Earl

Teşekkürler dostum :) Bu konuda hiçbir fikrim yoktu
dLobatog

12
Date () referans belgelerine ( developer.android.com/reference/java/util/Date.html ) göre, Date () sınıfının kullanımdan kaldırılmasına ilişkin hiçbir şey yoktur - ancak birkaç yöntem ve kurucu kullanımdan kaldırılmıştır.
Zac Seth

2
Bu, geçerli kullanıcı ayarları anlamında yanlış sonuç üretecektir (örneğin, 12/24 saat biçimi). Geçerli kullanıcı ayarları için DateFormat almak için android.text.format.DateFormat.getTimeFormat (Bağlam bağlamı) kullanın.
wonder.mice

@Zac haklı bile getTime Tarih metodu daha da tam kullanım

24
SimpleDateFormat databaseDateTimeFormate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat databaseDateFormate = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
SimpleDateFormat sdf3 = new SimpleDateFormat("EEE, MMM d, ''yy");
SimpleDateFormat sdf4 = new SimpleDateFormat("h:mm a");
SimpleDateFormat sdf5 = new SimpleDateFormat("h:mm");
SimpleDateFormat sdf6 = new SimpleDateFormat("H:mm:ss:SSS");
SimpleDateFormat sdf7 = new SimpleDateFormat("K:mm a,z");
SimpleDateFormat sdf8 = new SimpleDateFormat("yyyy.MMMMM.dd GGG hh:mm aaa");


String currentDateandTime = databaseDateTimeFormate.format(new Date());     //2009-06-30 08:29:36
String currentDateandTime = databaseDateFormate.format(new Date());     //2009-06-30
String currentDateandTime = sdf1.format(new Date());     //30.06.09
String currentDateandTime = sdf2.format(new Date());     //2009.06.30 AD at 08:29:36 PDT
String currentDateandTime = sdf3.format(new Date());     //Tue, Jun 30, '09
String currentDateandTime = sdf4.format(new Date());     //8:29 PM
String currentDateandTime = sdf5.format(new Date());     //8:29
String currentDateandTime = sdf6.format(new Date());     //8:28:36:249
String currentDateandTime = sdf7.format(new Date());     //8:29 AM,PDT
String currentDateandTime = sdf8.format(new Date());     //2009.June.30 AD 08:29 AM

Tarih formatı Kalıpları

G   Era designator (before christ, after christ)
y   Year (e.g. 12 or 2012). Use either yy or yyyy.
M   Month in year. Number of M's determine length of format (e.g. MM, MMM or MMMMM)
d   Day in month. Number of d's determine length of format (e.g. d or dd)
h   Hour of day, 1-12 (AM / PM) (normally hh)
H   Hour of day, 0-23 (normally HH)
m   Minute in hour, 0-59 (normally mm)
s   Second in minute, 0-59 (normally ss)
S   Millisecond in second, 0-999 (normally SSS)
E   Day in week (e.g Monday, Tuesday etc.)
D   Day in year (1-366)
F   Day of week in month (e.g. 1st Thursday of December)
w   Week in year (1-53)
W   Week in month (0-5)
a   AM / PM marker
k   Hour in day (1-24, unlike HH's 0-23)
K   Hour in day, AM / PM (0-11)
z   Time Zone

1
Diğer cevaplar da doğru olsa da. Zamanla ilgili sorunlara da yardımcı olduğu için bu cevabı beğendim. Teşekkürler @Vighnesh KM
Ankit Gupta

17
final Calendar c = Calendar.getInstance();
    int mYear = c.get(Calendar.YEAR);
    int mMonth = c.get(Calendar.MONTH);
    int mDay = c.get(Calendar.DAY_OF_MONTH);

textView.setText(""+mDay+"-"+mMonth+"-"+mYear);

15

Bu, tarih ve saati almak için yararlı olacak bir yöntemdir:

private String getDate(){
    DateFormat dfDate = new SimpleDateFormat("yyyy/MM/dd");
    String date=dfDate.format(Calendar.getInstance().getTime());
    DateFormat dfTime = new SimpleDateFormat("HH:mm");
    String time = dfTime.format(Calendar.getInstance().getTime());
    return date + " " + time;
}

Bu yöntemi çağırabilir ve geçerli tarih ve saat değerlerini alabilirsiniz:

2017/01//09 19:23

Sunum mantığı ile süreç mantığının sıkıca birleştirilmesini sevmiyorum; Sadece biçimlendirme yapan ve bir tarih giriş parametresi alan bir yöntemi tercih ederim. Ayrıca neden 2 SimpleDateFormats & 2 Dates kullandığınızı anlamıyorum ... sadece "yyyy/MM/dd HH:mm"format ve çağrı takvimi olarak kullanamaz mısınız?
AjahnCharles

12
Time time = new Time();
time.setToNow();
System.out.println("time: " + time.hour+":"+time.minute);

Bu size örneğin 12:32 verecektir.

Android.text.format.Time dosyasını içe aktarmayı unutmayın;


12
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Calendar cal = Calendar.getInstance();
    System.out.println("time => " + dateFormat.format(cal.getTime()));

    String time_str = dateFormat.format(cal.getTime());

    String[] s = time_str.split(" ");

    for (int i = 0; i < s.length; i++) {
         System.out.println("date  => " + s[i]);
    }

    int year_sys = Integer.parseInt(s[0].split("/")[0]);
    int month_sys = Integer.parseInt(s[0].split("/")[1]);
    int day_sys = Integer.parseInt(s[0].split("/")[2]);

    int hour_sys = Integer.parseInt(s[1].split(":")[0]);
    int min_sys = Integer.parseInt(s[1].split(":")[1]);

    System.out.println("year_sys  => " + year_sys);
    System.out.println("month_sys  => " + month_sys);
    System.out.println("day_sys  => " + day_sys);

    System.out.println("hour_sys  => " + hour_sys);
    System.out.println("min_sys  => " + min_sys);

12

Biçimle geçerli tarih ve saat için şunu kullanın:

Java dilinde

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());
Log.d("Date","DATE : " + strDate)

Kotlin bölgesinde

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val current = LocalDateTime.now()
    val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss")
    var myDate: String =  current.format(formatter)
    Log.d("Date","DATE : " + myDate)
} else {
    var date = Date()
    val formatter = SimpleDateFormat("MMM dd yyyy HH:mma")
    val myDate: String = formatter.format(date)
    Log.d("Date","DATE : " + myDate)
}

Tarih Formater kalıpları

"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01

Katkıda bulunmak istediğiniz için teşekkür ederiz. Önceki 36 cevapta olmayan bir şeye katkıda bulunuyor musunuz? Her durumda, meşhur zahmetli ve uzun süredir modası geçmiş SimpleDateFormatsınıfı kullanıyorsunuz. Oreo'dan önce bile gerek yok, bunun yerine java.time'ın backport'u ThreeTenABP'yi, modern Java tarih ve saat API'sını kullanabilirsiniz.
Ole VV

11

Ayrıca android.os.SystemClock kullanabilirsiniz. Örneğin, SystemClock.elapsedRealtime (), telefon uykudayken size daha doğru zaman okumaları verecektir.


10

Mevcut tarihe ihtiyacınız varsa:

Calendar cc = Calendar.getInstance();
int year = cc.get(Calendar.YEAR);
int month = cc.get(Calendar.MONTH);
int mDay = cc.get(Calendar.DAY_OF_MONTH);
System.out.println("Date", year + ":" + month + ":" + mDay);

Şimdiki zamana ihtiyacınız varsa:

 int mHour = cc.get(Calendar.HOUR_OF_DAY);
 int mMinute = cc.get(Calendar.MINUTE);
 System.out.println("time_format" + String.format("%02d:%02d", mHour , mMinute));

9

Özelleştirilmiş bir saat ve tarih biçimi için:

    SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ",Locale.ENGLISH);
    String cDateTime=dateFormat.format(new Date());

Çıktı aşağıdaki format gibidir: 2015-06-18T10: 15: 56-05: 00


8
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();

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

Bu benim için de çalışır.


8

Tarihi kullanarak şunları elde edebilirsiniz:

Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");

Bu, aşağıdaki örnekte olduğu gibi size güzel bir form verecektir: "2014/02/09".


Parametresiz kurucu Time t = new Time();varsayılan saat dilimini kullanır. Deneyimlerime göre, default == current.
William T. Mallard

7

Peki bu kod fuse API tarafından bazı cevaplar ile sorunları vardı, umarım onlara çocuklar hizmet vermektedir:

    Time t = new Time(Time.getCurrentTimezone());
    t.setToNow();
    String date1 = t.format("%Y/%m/%d");

    Date date = new Date(System.currentTimeMillis());
    SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
            Locale.ENGLISH);
    String var = dateFormat.format(date);
    String horafecha = var+ " - " + date1;

    tvTime.setText(horafecha);

Çıktı: 03:25 PM - 2017/10/03


7

Sadece aşağıdaki kodu kullanabilirsiniz:

 DateFormat df = new SimpleDateFormat("HH:mm"); // Format time
 String time = df.format(Calendar.getInstance().getTime());

 DateFormat df1 = new SimpleDateFormat("yyyy/MM/dd"); // Format date
 String date = df1.format(Calendar.getInstance().getTime());

6

Bunu dene

String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());

Bu mükemmel bir astar ve zarif bir çözümdür. Diğer cevaplarda olduğu gibi gereksiz uzun çözümlere gerek yok.
zeeshan

5

Aşağıdaki yöntem Dize'de geçerli tarih ve saati döndürecektir, Gerçek saat diliminize göre farklı saat dilimi kullanın. GMT kullandım

public static String GetToday(){
    Date presentTime_Date = Calendar.getInstance().getTime();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
    return dateFormat.format(presentTime_Date);
}

4

Yeni API'ya göre Calender sınıfını kullanmalısınız. Tarih sınıfı şimdi kullanımdan kaldırıldı.

Calendar cal = Calendar.getInstance();

String date = ""+cal.get(Calendar.DATE)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.YEAR);

String time = ""+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE);

4

Aşağıdaki kodu kullanmaya çalışın:

 Date date = new Date();
 SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());  
 String currentDate = dateFormatWithZone.format(date);
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.