Java'da geçerli tarih ve saati nasıl edinebilirim?
DateTime.Now
C # den eşdeğer bir şey arıyorum .
Java'da geçerli tarih ve saati nasıl edinebilirim?
DateTime.Now
C # den eşdeğer bir şey arıyorum .
Yanıtlar:
Date
Herhangi bir argüman olmadan yeni bir nesne oluşturun; bu, yeni nesneye geçerli tarih ve saati atar.
import java.util.Date;
Date d = new Date();
Sözleriyle Javadocs için sıfır argüman yapıcısı :
Bir Date nesnesini atar ve en yakın milisaniyeye kadar ölçülen , tahsis edildiği zamanı temsil edecek şekilde başlatır .
Kullandığınızdan java.util.Date
ve olmadığınızdan emin olun java.sql.Date
- ikincisinin sıfır arg yapıcısı yoktur ve tamamen farklı bir konuşmanın konusu olan biraz farklı semantiği vardır. :)
Java Tarih ve Takvim sınıfları pek çok kişi tarafından kötü tasarlanmış olarak değerlendirilir. Java'nın yerleşik tarih kütüphaneleri yerine yaygın olarak kullanılan bir kütüphane olan Joda Time'a bir göz atmalısınız .
DateTime.Now
Joda Time'da eşdeğeri :
DateTime dt = new DateTime();
Güncelleme
Yorumlarda belirtildiği gibi, Joda Time'ın son sürümlerinin bir DateTime.now()
yöntemi var, bu yüzden:
DateTime dt = DateTime.now();
Instant.now()
Java.util.Date sınıfının Java 8 ve sonraki sürümlerindeki yeni java.time paketi ( Tutorial ) tarafından modası geçmiş . Eski java.util.Date/.Calendar sınıfları kötü şöhretli, kafa karıştırıcı ve kusurludur. Onlardan kaçının.
ZonedDateTime
Java.time geçerli an alın.
ZonedDateTime now = ZonedDateTime.now();
Bir ZonedDateTime
kapsül içerir:
Herhangi bir saat dilimi belirtilmezse, JVM'nizin geçerli varsayılan saat dilimi sessizce atanır. İstediğiniz / beklenen saat dilimini belirtmek, varsayılan olarak örtük olarak kullanmaktan daha iyidir.
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
Genellikle UTC zaman diliminde arka uç işinizi (iş mantığı, veritabanı, depolama, veri alışverişi) yapma alışkanlığına sahip olmak daha iyidir . Yukarıdaki kod dolaylı olarak JVM'nin geçerli varsayılan saat dilimine dayanır.
Instant
Sınıf nanosaniye çözünürlüğe sahip UTC zaman çizelgesinde bir anını temsil ediyor.
Instant instant = Instant.now();
Instant
Sınıf java.time bir temel yapı bloğu sınıftır ve kodunuzda sık kullanılabilir.
Biçimlendirme konusunda daha fazla esnekliğe ihtiyaç duyduğunuzda OffsetDateTime
. Bir ZoneOffset
nesne belirtin . UTC için UTC için kullanışlı sabiti kullanın .
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
Kullanıcıya sunum için kolayca başka bir saat dilimine ayarlayabilirsiniz. Uygun bir saat dilimi adı kullanın , aslaEST
veya gibi 3-4 harf kodunu kullanmayın IST
.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );
Yerelleştirilen bu tarih-saat değerinin bir Dize temsilini oluşturun.
String output = DateTimeFormatter
.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
.format ( nowMontreal );
Instant
Veya UTC'de kalmak için kullanın Instant
. Bir Instant
nesne, zaman çizgisinde, nanosaniye çözünürlüğüne kadar, her zaman UTC cinsinden bir anı temsil eder. Bu, yapı taşını bir zaman dilimi atamasıyla birlikte belirli bir tarih-saat için sağlar. Kavramsal olarak bu şekilde düşünebilirsiniz:
Bir çıkarabilir Instant
bir mesafede ZonedDateTime
.
Instant instantNow = zdt.toInstant();
Bir Anında Arama ile başlayabilirsiniz. Instant
Her zaman UTC'de olduğu gibi , burada bir saat dilimi belirtmenize gerek yoktur .
Instant now = Instant.now();
Takvim nesnesini kullanmayı tercih ederim.
Calendar now = GregorianCalendar.getInstance()
Çalışmayı çok daha kolay buluyorum. Takvim'den bir Date nesnesi de alabilirsiniz.
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
Calendar.getInstance()
Java 8'de:
ZonedDateTime dateTime = ZonedDateTime.now();
java.lang.System.currentTimeMillis();
dönemden beri datetime dönecek
Yeni bir Date nesnesi oluşturursanız, varsayılan olarak geçerli saate ayarlanır:
import java.util.Date;
Date now = new Date();
Java, tarih ve saat kullanım durumları için her zaman yetersiz desteğe sahiptir. Örneğin, varolan sınıflar ( java.util.Date
ve gibi SimpleDateFormatter
) eşzamanlılık sorunlarına yol açabilecek iş parçacığı için güvenli değildir. Ayrıca API'de bazı kusurlar var. Örneğin, yıllar java.util.Date
1900'de başlar, aylar 1'de başlar ve günler 0'da başlar - çok sezgisel değil. Bu sorunlar, üçüncü taraf tarih ve saat kitaplıklarının popülerliğine yol açmıştır Joda-Time
. Java SE 8 için yeni bir tarih ve saat API'sı tasarlanmıştır.
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
Doc başına :
Yöntem
now()
, sistem saatini ve varsayılan saat dilimini kullanarak geçerli tarih saatini döndürür, boş değil . Geçerli tarih saatini, varsayılan saat dilimindeki sistem saatinden alır. Bu, geçerli tarih saatini elde etmek için sistem saatini varsayılan saat diliminde sorgulayacaktır. Bu yöntemi kullanmak, saat sabit kodlanmış olduğu için test için alternatif bir saat kullanma yeteneğini önleyecektir.