Java tarih biçimi - ek karakterler dahil


88

Java'da php date () stil biçimlendirmesinin bir eşdeğeri var mı? Demek istediğim, php'de karakterleri tam anlamıyla ele almak için ters eğik çizgi-kaçış yapabilirim. Yani yyyy \ y \ e \ a \ r olacaktı 2010 yılı . Java'da benzer bir şey bulamadım, tüm örnekler yalnızca yerleşik tarih biçimleriyle ilgilidir.

Özellikle, JCalendar tarih seçicileri ve dateFormatString özellikleriyle ilgileniyorum .

Buna ihtiyacım var çünkü yerel ayarımda her türlü ek şeyi tarih formatında yazmam gerekiyor, d gibi. (gün için) günler bölümünden sonra, m. (yıllarca) yıllar sonra, vb. En kötü durumda, dize değiştirme veya regexp kullanabilirim ama belki daha basit bir yolu var mı? Şimdiden teşekkürler!


1
Bunu 2019 veya daha sonra okuyan herkes için, SimpleDateFormatbirkaç cevapta kullanılan sınıf, herkesin bildiği gibi zahmetli ve modası geçmiş. Bunu önlemek. Bunun yerine Mark Jeronimus'un modern Java tarih ve saat API'si olan java.time'ın kullanımını gösteren kısa cevabını kullanın .
Ole VV

Yanıtlar:


165

Elbette, SimpleDateFormat ile değişmez dizeler ekleyebilirsiniz:

Tarih ve zaman örüntü dizgileri içinde, "A" dan "Z" ye ve "a" dan "z" ye tırnaksız harfler, bir tarih veya saat dizesinin bileşenlerini temsil eden desen harfleri olarak yorumlanır. Yorumlanmayı önlemek için metin tek tırnak (') kullanılarak alıntılanabilir. "''" tek bir alıntıyı temsil eder. Diğer tüm karakterler yorumlanmaz; biçimlendirme sırasında basitçe çıktı dizesine kopyalanır veya ayrıştırma sırasında giriş dizesiyle eşleşir.

 "hh 'o''clock' a, zzzz"    12 o'clock PM, Pacific Daylight Time

Süper, tam da ihtiyacım olan şey bu. Şaşırtıcı bir şekilde, web'de gezdiğim sayısız örnekte bu kadar basit bir şey bulamadım :) Çok teşekkürler!
Sejanus

1
Alıntı karakterinden nasıl kaçarım? Mm 'formatıyla bir şeyler yapmaya çalışıyorum. 46 'gibi 46 dakika gösterir.
Sotti

3
@Sotti: 46''. İkinciden ilk kaçan.
Thilo

1
Bilginize gibi korkunç zahmetli 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.
Basil Bourque

24

Tamlık adına, Java 8'ler DateTimeFormatterde bunu destekler:

DateTimeFormatter.ofPattern("yyyy 'year'");


6

java.time

Mark Jeronimus zaten söyledi . Ben biraz daha detaylandırıyorum. Sadece yazdırılacak metni tek tırnak içine koyun.

    DateTimeFormatter yearFormatter = DateTimeFormatter.ofPattern("yyyy 'year'");
    System.out.println(LocalDate.of(2010, Month.FEBRUARY, 3).format(yearFormatter));
    System.out.println(Year.of(2010).format(yearFormatter));
    System.out.println(ZonedDateTime.now(ZoneId.of("Europe/Vilnius")).format(yearFormatter));

Şu anda çalışırken çıktı:

2010 year
2010 year
2019 year

A DateTimeFormatterBuilderve appendPatternyöntemini kullanıyorsanız, tek tırnak işaretlerini aynı şekilde kullanın. Veya onun appendLiteralyöntemini kullanın ve tek tırnak kullanmayın.

O halde formata nasıl tek bir alıntı koyarız? İki tek tırnak bir tane oluşturur. Çift tek alıntının tek tırnak içinde olup olmaması önemli değildir:

    DateTimeFormatter formatterWithSingleQuote = DateTimeFormatter.ofPattern("H mm'' ss\"");
    System.out.println(LocalTime.now(ZoneId.of("Europe/London")).format(formatterWithSingleQuote));

10 28 '34 "

    DateTimeFormatter formatterWithSingleQuoteInsideSingleQuotes
            = DateTimeFormatter.ofPattern("hh 'o''clock' a, zzzz", Locale.ENGLISH);
    System.out.println(ZonedDateTime.now(ZoneId.of("America/Los_Angeles"))
            .format(formatterWithSingleQuoteInsideSingleQuotes));

Saat 02:00, Pasifik Yaz Saati

Yukarıdaki biçimlendiricilerin tümü ayrıştırma için de kullanılabilir. Örneğin:

    LocalTime time = LocalTime.parse("16 43' 56\"", formatterWithSingleQuote);
    System.out.println(time);

16:43:56

SimpleDateFormatBu soru yaklaşık 10 yıl önce istendi kullanılan sınıf herkesin bildiği gibi zahmetli ve uzun modası geçmiş olduğunu. Bunun yerine modern Java tarih ve saat API'si olan java.time'ı kullanmanızı tavsiye ederim. İşte bu yüzden bunu gösteriyorum.

Bağlantılar


-4

java.text.SimpleDateFormat

SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); 
String formattedDate = formatter.format(date);

Burada daha fazla bilgi alacaksınız bağlantı metni

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.