Java'da güncel tarihi dizeye nasıl dönüştürebilirim?


Yanıtlar:



62
// GET DATE & TIME IN ANY FORMAT
import java.util.Calendar;
import java.text.SimpleDateFormat;
public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";

public static String now() {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
return sdf.format(cal.getTime());
}

Buradan alındı


Tarih yerine Takvim kullanmak için en iyi yanıt.
rastgele

5
Kafam karıştı. Hangi evrenden Calendardaha arzu edilir Date?
jasonmp85

1
Bilginize, bu zahmetli sınıflar artık mirastır ve yerini java.time sınıfları almıştır. Oracle Eğitimine bakın .
Fesleğen Bourque

27
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();

58
Fazla başarılı olduğum için üzgünüm.
jasonmp85

2
Bu yöntem tarafından kullanılan format korkunç. Ayrıca, KVM'nizin geçerli varsayılan saat dilimi dolaylı olarak uygulanır, bu nedenle sonuçlarınız değişiklik gösterir. Ve bu zahmetli sınıflar artık miras, yerini java.time sınıfları alıyor. Oracle Eğitimine bakın .
Fesleğen Bourque


14

tl; Dr.

LocalDate.now()
         .toString() 

2017/01/23

İstenilen / beklenen saat dilimini açıkça belirtmek daha iyidir.

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .toString() 

java.time

Java 8 ve sonraki sürümlerden itibaren modern yol, java.time çerçevesidir.

Herhangi bir anda tarih dünya çapında değişiklik göstereceği için saat dilimini belirtin.

ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;  // Or ZoneOffset.UTC or ZoneId.systemDefault()
LocalDate today = LocalDate.now( zoneId ) ;
String output = today.toString() ;

2017/01/23

Varsayılan olarak, standart ISO 8601 biçiminde bir Dize alırsınız .

Diğer biçimler için java.time.format.DateTimeFormattersınıfı kullanın .


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.

Şu anda bakım modunda olan Joda-Time projesi, java.time sınıflarına geçişi önerir .

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

Java.time nesnelerini doğrudan veritabanınız ile değiş tokuş edebilirsiniz . JDBC 4.2 veya üstü ile uyumlu bir JDBC sürücüsü kullanın . Dizelere gerek yok, derslere gerek yok .java.sql.*

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

ThreeTen-Ekstra proje ek sınıfları ile java.time uzanır. Bu proje, java.time'a gelecekteki olası eklemeler için kanıtlayıcı bir zemindir. Burada bazı yararlı sınıfları gibi bulabilir Interval, YearWeek, YearQuarter, ve daha .


9

Daha hızlı :

String date = FastDateFormat.getInstance("dd-MM-yyyy").format(System.currentTimeMillis( ));

4
Org.apache.commons gerektirir
Josiah Yoder

1

YYYY-AA-gg olarak zaman için

String time = new DateTime( yourData ).toString("yyyy-MM-dd");

Ve DateTime Kitaplığı:

import org.joda.time.DateTime;


Ve hangi kütüphaneden DateTimegeliyor? Yığın Taşması ile ilgili bir Cevap, bu sitenin bir pasaj kitaplığından daha fazlası olması gerektiği için bazı açıklamalar içermelidir.
Basil Bourque

0

Cevapların çoğu geçerli. Tarih işleme için yeni JAVA API değişikliği, java tarih işlemede daha önceki bazı belirsizliklerin azaltılmasını sağladı.

Benzer aramalar için kullanımdan kaldırılmış bir mesaj alacaksınız.

new Date() // deprecated

Yukarıdaki çağrı, geliştiricinin yeni bir Date nesnesinin Date nesnesine geçerli zaman damgasını vereceğini varsaymasını sağladı. Bu davranış, diğer Java API sınıflarında tutarlı değildir.

Bunu yapmanın yeni yolu Takvim Örneğini kullanmaktır.

new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()

Burada da adlandırma kuralı mükemmel değil ama bu oldukça organize. Benim gibi bir şeyleri gasp etmekte zorlanan ama mantıklı göründüğünde / göründüğünde bir şeyi asla unutmayacak biri için bu iyi bir yaklaşım.

Bu gerçek hayatla daha eş anlamlıdır

  1. Bir Calendar nesnesi alırız ve içindeki zamanı ararız. (Takvimden hiç kimsenin zaman alamadığını merak ediyor olmalısın, bu yüzden mükemmel olmadığını söyledim ama bu tamamen farklı bir konu)
  2. Daha sonra tarihi basit bir Metin biçiminde istiyoruz, bu nedenle Adım 1'deki Tarihi biçimlendirmemize yardımcı olan bir SimpleDateFormat yardımcı sınıfını kullanıyoruz. Biçimde parametreler olarak yyyy, MM, dd kullandım. Desteklenen tarih biçimi parametreleri

Bunu yapmanın bir başka yolu da Joda zaman API'sini kullanmaktır

new DateTime().toString("yyyy-MM-dd")

ya da çok bariz

new DateTime(Calendar.getInstance().getTime()).toString("yyyy-MM-dd")

her ikisi de aynı sonucu döndürecektir.


Bilginize, gibi zahmetli eski tarih-saat sınıfları java.util.Date, java.util.Calendarve java.text.SimpleTextFormatşimdi mirası supplanted, java.time sınıfları. Ayrıca, Joda-Time projesi şu anda bakım modunda ve ekip java.time'a geçişi tavsiye ediyor.
Basil Bourque

1
@BasilBourque Cevabımda kastettiğim bu, en çok oylanan cevabın doğru olduğu, ancak günümüz geliştiricisiyle ilgili olmadığı. Son olarak, java bir Clock sınıfına sahip olacak ve Clock.getTime (), Date veya DateTime veya Time sınıflarından çok daha mantıklı ve gerçek hayatı taklit edecek. Java geliştiricilerinin, OOPS'nin gerçek hayat senaryolarını taklit eden bir şey olarak başladığını bilmeleri gerekir.
Swapnil Vargaonkar

Bilginize, ClockJava 8'deki uygulama eski sınıflarla tamamen aynıdır. Yalnızca Java 9'da, mevcut anı nanosaniye kadar ince bir çözünürlükle yakalayabilen yeni bir uygulama gelir.
Fesleğen Bourque

Evet, "nihayet" yazmamın nedeni budur. Java, gerçek hayat senaryosunu (OOPS kavramı) taklit edecek ve mevcut anı gösterecek / yakalayacak (sizin tercih ettiğiniz şekilde) bir Clock sınıfına sahip olacak.
Swapnil Vargaonkar

-2
public static Date getDateByString(String dateTime) {
        if(dateTime==null || dateTime.isEmpty()) {
            return null;
        }
        else{
            String modified = dateTime + ".000+0000";
            DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
            Date dateObj = new Date();
            Date dateObj1 = new Date();
            try {
                if (dateTime != null) {
                    dateObj = formatter.parse(modified);
                }

            } catch (ParseException e) {
                e.printStackTrace();
            }

            return dateObj;
        }

    }

1
Bu kod parçası hakkında bazı açıklamalar muhtemelen faydalı olacaktır.
Pyves

1
Cevap soruyla alakalı değil. Ve Hayır, tarihi herhangi bir Stringbiçimde işlevinize aktaramazsınız.
Jerin Joseph
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.