Yanıtlar:
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
Calendar.getInstance().getTime()
ya Calendar.getInstance().getTimeInMillis()
da işe yarayacak.
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 1410543205000
başlayana kadar tekrarlanmaya başlayacağı gibi aynı değeri tekrarlayacaktır.
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.
GregorianCalendar
yı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.
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());
String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
sdf.setTimeZone(TimeZone.getDefault())
ortada
Ö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
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.
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
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);
Instant.now() // Current moment in UTC.
…veya…
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone
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.
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 Instant
de zaman çizelgesi üzerinde bir andır UTC için çözünürlüğe kadar olan nanosaniye .
Instant instant = Instant.now(); // Current moment in UTC.
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/region
gibi America/Montreal
, Europe/Brussels
ya da Asia/Kolkata
. Hiçbir zaman gibi 3-4 harfli kısaltmalar kullanmayın EST
veya IST
onlar 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 );
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.
toString
Ortak 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
, toString
yö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 /]
Veya DateTimeFormatter
sı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 Locale
bir insan dili (İngilizce, Fransızca , vb.) Belirtin . Bunun Locale
saat dilimi ile ilgisi olmadığını unutmayın .
formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );
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.
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?
Instant.now()
ve ZonedDateTime.now()
gereklidir API 26
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();
Cannot resolve constructor Date()
Android, Android SDK Java 6 ve 7 karışımı kullanır
Date currentDate = new Date(System.currentTimeMillis());
doğru
new Date(System.currentTimeMillis())
doğru değil: (a) gereksizdir, çünkü tam olarak aynıdır new Date()
. (b) Sorun java.util.Date
yaratan sınıfın yerini java.time.Instant
Java 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ı .
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 SimpleDateFormat
den buraya .
java.util.Date
, java.util.Calendar
ve java.text.SimpleDateFormat
şimdi mirası supplanted, java.time sonra Java 8 ve yerleşik sınıflara. Oracle'ın Öğreticisine bakın .
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);
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);
Calendar
veya GregorianCalendar
. Date
Sınıf kaldırılmıştır.
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
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);
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
SimpleDateFormat
s & 2 Date
s kullandığınızı anlamıyorum ... sadece "yyyy/MM/dd HH:mm"
format ve çağrı takvimi olarak kullanamaz mısınız?
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);
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
SimpleDateFormat
sı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.
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));
Ö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
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
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".
Time t = new Time();
varsayılan saat dilimini kullanır. Deneyimlerime göre, default == current.
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
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());
Bunu dene
String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
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);
}
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);
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);