Java'da yyyy-AA-gg biçimine takvim tarihi


210

Takvim tarihini yyyy-MM-ddbiçime dönüştürme.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date1 = format1.format(date);            
Date inActiveDate = null;
try {
    inActiveDate = format1.parse(date1);
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

Bu üretecek inActiveDate = Wed Sep 26 00:00:00 IST 2012. Ama ihtiyacım olan şey 2012-09-26. Amacım, Hazırda Bekleme ölçütlerini kullanarak bu tarihi veritabanımdaki başka bir tarihle karşılaştırmak. Tarih yyyy-MM-ddbiçiminde nesneye ihtiyacım var .


5
Kodun kafa karıştırıcı. Eğer bir biçimlendirmek için çalışıyorsunuz Dateiçin yyyy-MM-ddveya bir dize ayrıştırmak yyyy-MM-dda Datedeğeri ?? Tarihi biçimlendirmek için, yalnızca format1.format(date)ayrıştırmak için kullanın, şunu kullanınformat1.parse(someStringValueInTheCorrectFormat)
MadProgrammer


9
bir astar:( new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" ) ).format( Calendar.getInstance().getTime() );
Iwan Aucamp

Yanıtlar:


342

Java Date, 1 Ocak 1970, 00:00:00 GMT'den bu yana geçen milisaniye sayısı için bir kaptır.

Bunun gibi bir şey System.out.println(date)kullandığınızda, Java Date.toString()içeriği yazdırmak için kullanır .

Bunu değiştirmenin tek yolu geçersiz kılmak Dateve kendi uygulamanızı sağlamaktır Date.toString(). Şimdi IDE'nizi ateşleyip denemeden önce, yapmazdım; sadece işleri karmaşıklaştıracaktır. Tarihi kullanmak istediğiniz biçime (veya görüntülemek) göre biçimlendirmeniz daha iyi olur.

Java 8+

LocalDateTime ldt = LocalDateTime.now().plusDays(1);
DateTimeFormatter formmat1 = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
System.out.println(ldt);
// Output "2018-05-12T17:21:53.658"

String formatter = formmat1.format(ldt);
System.out.println(formatter);
// 2018-05-12

Java 8'den önce

Sen yararlanarak edilmelidir ThreeTen backport

Aşağıdakiler tarihsel amaçlar için korunur (orijinal cevap olarak)

Yapabileceğiniz şey tarihi biçimlendirmektir.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(cal.getTime());
// Output "Wed Sep 26 14:23:28 EST 2012"

String formatted = format1.format(cal.getTime());
System.out.println(formatted);
// Output "2012-09-26"

System.out.println(format1.parse(formatted));
// Output "Wed Sep 26 00:00:00 EST 2012"

Bunlar aslında farklı bir şekilde temsil edilen aynı tarih.


1
Tür, ama çok daha kolayCalendar
MadProgrammer

1
Yine de bu takvim nesnesinden saat dilimi tamamen kaldırmak için?
Sarika.S

2
Tarih / saat manipülasyonu konusunda gerçekten ciddiyseniz, Joda Time'a bir göz atın , daha sonra Calendar
uğraşmak

2
@ n13 Eğer soru veritabanı tarih manipülasyonu veya hatta zaman manipülasyonu ile ilgili ise, size katılıyorum. Soru, belirli bir tarih biçiminde bir tarih değerinin nasıl temsil edileceği idi
MadProgrammer 5:13

1
Güzel yapılandırılmış cevap - bu temelde Model (Tarih) -Görünüm (Biçim) ayrılmasıdır.
YoYo

19

Kodunuz yanlış. Tarih ayrıştırma noktası yok ve bunu Date nesnesi olarak sakla.

Takvim tarihi nesnesini görüntülemek ve dize olarak tutmak istediğinizde biçimlendirebilirsiniz.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");          
String inActiveDate = null;
try {
    inActiveDate = format1.format(date);
    System.out.println(inActiveDate );
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

13

java.time

MadProgrammer tarafından cevap konusunda özellikle uç doğrudur Joda-Time . Joda-Time'ın halefi artık yeni java.time paketi olarak Java 8'de yerleşik olarak bulunuyor . Java 8'deki örnek kod.

Tarih-saat ile çalışırken (yerel tarihe karşılık), saat dilimi kritiktir. Ayın günü saat dilimine bağlıdır. Örneğin, Hindistan saat dilimi olan +05:30ise, (beş buçuk saat ileri UTC) Fransa sadece bir saat ileride. Yani Hindistan'da yeni bir günde bir anın bir tarihi varken, aynı anın “dün” tarihi vardır. Herhangi bir saat dilimi veya ofset bilgisi içermeyen dize çıktısı oluşturmak belirsizlik yaratıyor. YYYY-AA-GG çıktısını istediniz, bu yüzden sağladım, ancak önermiyorum. Bunun yerine bu çıktıyı almak ISO_LOCAL_DATEiçin kullanılır ISO_DATE:2014-02-25+05:30

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );

DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );

Konsola dökümü…

System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );

Çalıştırıldığında…

zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25

Joda-Time

Java.time öğesinin öncüsü olan Joda-Time kitaplığını kullanan benzer kod .

DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );

ISO 8601

Bu arada, giriş dizenizin bu biçimi ISO 8601 tarafından tanımlanan birkaç kullanışlı tarih-saat dizesi biçiminden biri olan standart bir biçimdir .

Hem Joda-Time hem de java.time, çeşitli tarih-saat değerlerinin dize temsillerini ayrıştırırken ve oluştururken varsayılan olarak ISO 8601 formatlarını kullanır.


6

java.util.DateNesne temsil edemez tarih içinde özel biçimi yerine, kullanmak ettik SimpleDateFormat.formatdöndürdüğü yöntemi string.

String myString=format1.format(date);

2

Bir java.util.Datenesneyi ayrıştırmak için önce kendi biçiminizi kullanarak onu String'e dönüştürmeniz gerekir.

inActiveDate = format1.parse(  format1.format(date)  );

Ama burada gereksiz olduğunuzu düşünüyorum.


2
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 7);
Date date = c.getTime();
SimpleDateFormat ft = new SimpleDateFormat("MM-dd-YYYY");
JOptionPane.showMessageDialog(null, ft.format(date));

Bu, bir JOption penceresi bölmesinde tarihinizi + 7 gün ay, gün ve yıl biçiminde görüntüler.


2
public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
    cal.set(year, month, date);
    SimpleDateFormat format1 = new SimpleDateFormat("yyyy MM dd");
    String formatted = format1.format(cal.getTime());
    System.out.println(formatted);
}

2
SO hoş geldiniz. Yalnızca kod yanıtları standartlarımızı karşılamadığından, lütfen bir bağlam / açıklama ekleyin. Bkz. Stackoverflow.com/help/how-to-answer
Uwe Allner

0

Tarihin veritabanındaki tarih alanıyla karşılaştırmak için bir biçimde karşılaştırıldığı bu kodu buldum ... bu sizin için yararlı olabilir ...

Dizeyi simpledateformat kullanarak tarihe dönüştürdüğünüzde, mysql veritabanlarındaki Tarih alanıyla karşılaştırmak zordur.

Bu nedenle, java dizesi tarihini STR_to_DATE ('tarih', '% m /% d /% Y') -> seçeneğini kullanarak bu biçimde dönüştürün, ardından mysql tarih alanının tam tarih biçimini alırsınız.

http://javainfinite.com/java/java-convert-string-to-date-and-compare/


3
Link-rot ve diğer sorunlar nedeniyle StackOverflow'da yalnızca bağlantı cevapları önerilmez. Önemli noktaları içeren bilgilerin bir özetini verebilir misiniz?
Basil Bourque

0
public static String ThisWeekStartDate(WebDriver driver) {
        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        System.out.println("Before Start Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("Start Date " + CurrentDate);
          return CurrentDate;

    }
    public static String ThisWeekEndDate(WebDriver driver) {

        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        System.out.println("Before End Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("End Date " + CurrentDate);
          return CurrentDate;
    }
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.