Joda-Time DateTime'ı yalnızca aa / gg / yyyy olarak biçimlendirmek nasıl?


189

Bir dizem var " 11/15/2013 08:00:00", " " olarak biçimlendirmek istiyorum 11/15/2013, doğru DateTimeFormatterdesen nedir?

Birçok denedim ve googled ve hala doğru deseni bulamıyorum.

edit: Ben Java'nın SimpleDateFormat değil, Joda-Time DateTimeFormatter arıyorum ..


2
tl; dr: DateTimeFormat.forPattern ("AA / gg / yyyy SS: dd: ss"). yazdır (DateTime.now ())
— Andrew

Yanıtlar:


386

Joda zamanı

DateTimeFormatterKullanarak oluşturmaDateTimeFormat.forPattern(String)

Joda zamanını kullanarak böyle yapardınız:

String dateTime = "11/15/2013 08:00:00";
// Format for input
DateTimeFormatter dtf = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");
// Parsing the date
DateTime jodatime = dtf.parseDateTime(dateTime);
// Format for output
DateTimeFormatter dtfOut = DateTimeFormat.forPattern("MM/dd/yyyy");
// Printing the date
System.out.println(dtfOut.print(jodatime));

Standart Java ≥ 8

Java 8 , tarihler ve saatlerle başa çıkmayı kolaylaştıran yeni bir Tarih ve Saat kütüphanesi tanıttı . Standart Java sürüm 8 veya üstünü kullanmak isterseniz, bir DateTimeFormatter kullanırsınız . StringBir java.time.LocalDateTime veya LocalDate öğenizde bir saat diliminiz olmadığından, ZonedDateTime ve ZonedDate zaman bölmeli çeşitleri kullanılabilir.

// Format for input
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");
// Parsing the date
LocalDate date = LocalDate.parse(dateTime, inputFormat);
// Format for output
DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy");
// Printing the date
System.out.println(date.format(outputFormat));

Standart Java <8

Java 8'den önce, bir SimpleDateFormat ve java.util.Date kullanırsınız

String dateTime = "11/15/2013 08:00:00";
// Format for input
SimpleDateFormat dateParser = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
// Parsing the date
Date date7 = dateParser.parse(dateTime);
// Format for output
SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy");
// Printing the date
System.out.println(dateFormatter.format(date7));

7
üzgünüm, ama jodatime'ın DateTimeFormatter arıyorum.
— iCodeLikeImDrunk

1
@yaojiang Joda ile aynı biçim dizesi sözdizimini kullanır SimpleDateFormat. API belgelerini okuyun.
— Jesper

@yaojiang Jesper'in belirttiği gibi, Joda daha fazla seçeneğe sahip olmasına rağmen aynı biçimlendirme dizelerini kullanır. Örneği Joda'yı içerecek şekilde genişlettim, çok benzer olduğunu görebilirsiniz.
— DeltaLima

garip olarak DateTimeFormatter kullanıyorum dtf = DateTimeFormat.forPattern ("AA / gg / yyyy"); ve hala "aa / gg / yyyy ss: dd: ss"
— alıyorum

2
Joda-Time, java.util.Date/Calendar ile çok benzer biçimlendirme kodları kullanırken, küçük farklılıklar için dokümanı dikkatlice okuyun. Aynı değiller.
— Basil Bourque

45

Diğer cevaplar tamamen kabul edilebilir olsa da buraya ekliyorum. JodaTime, DateTimeFormat içinde önceden oluşturulmuş ayrıştırıcılara sahiptir:

dateTime.toString(DateTimeFormat.longDate());

Biçimleriyle birlikte yazdırılan seçeneklerin çoğu budur:

shortDate:         11/3/16
shortDateTime:     11/3/16 4:25 AM
mediumDate:        Nov 3, 2016
mediumDateTime:    Nov 3, 2016 4:25:35 AM
longDate:          November 3, 2016
longDateTime:      November 3, 2016 4:25:35 AM MDT
fullDate:          Thursday, November 3, 2016
fullDateTime:      Thursday, November 3, 2016 4:25:35 AM Mountain Daylight Time

1
güzel, bu hangi sürümü tanıttı? aptal biçim dizeleri oluşturarak çok zaman
— kazanın

Evet, kesinlikle katılıyorum. Her zaman orada olmuş gibi görünüyor. joda-time.sourceforge.net/apidocs/org/joda/time/format/…
— Chad Bingham

21
DateTime date = DateTime.now().withTimeAtStartOfDay();
date.toString("HH:mm:ss")

1
Bu yararlıdır, ancak soruyu tam olarak cevaplamamaktadır. Tek satırlı sürüm:DateTime.now().toString("HH:mm:ss")
— hBrent

11

JodaTime kullanıyorsanız, bunun işe yarayacağını düşünüyorum:

String strDateTime = "11/15/2013 08:00:00";
DateTime dateTime = DateTime.parse(strDateTime);
DateTimeFormatter fmt = DateTimeFormat.forPattern("MM/dd/YYYY");
String strDateOnly = fmt.print(dateTime);

Buradan bir parçam var .


Dokümantasyon bağlantınız eski. Doğru URL: joda.org/joda-time/apidocs/org/joda/time/format/…
— Basil Bourque

1
@BasilBourque Yılın gününü işaret ettiğiniz için teşekkür ederiz D, ancak "dokümantasyona bağlantım" güncel değil: Bağlantı verdiğim dokümantasyon güncel değil. Kendi uğruna belgelere bağlantı yapmıyordum, bazı kodları aldığım sayfaya bağlantı veriyordum - bu eski belgelere dönüşüyor.
— Şapkalı Adam

10

Çok aptal ama çalışan bir seçeneğim var. Dizeniz varsa fullDate = "11/15/2013 08:00:00";

   String finalDate = fullDate.split(" ")[0];

Bu kolay ve hızlı çalışmalıdır. :)


evet, kesinlikle formatı değiştireceğim. bu işe yarıyor ama sadece bu dava için.
— iCodeLikeImDrunk

1
Gerçekten beklenen bir davranış değil, daha sonra kodunuzu gören hiç kimse (siz de dahil) burada ne yaptığınızı anlamıyor ...
— Sercan Ozdemir

3

GÜNCELLENMİŞ:

Şunları yapabilirsiniz: bir sabit oluşturabilirsiniz:

private static final DateTimeFormatter DATE_FORMATTER_YYYY_MM_DD =
          DateTimeFormat.forPattern("yyyy-MM-dd"); // or whatever pattern that you need.

Bu DateTimeFormat şunlardan içe aktarılıyor: (buna dikkat edin)

import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter;

Tarihi şununla ayrıştır:

DateTime.parse(dateTimeScheduled.toString(), DATE_FORMATTER_YYYY_MM_DD);

Önce:
DateTime.parse ("201711201515", DateTimeFormat.forPattern ("yyyyMMddHHmm")). ToString ("yyyyMMdd");

datetime istiyorsanız:

DateTime.parse("201711201515", DateTimeFormat.forPattern("yyyyMMddHHmm")).withTimeAtStartOfDay();

2

Bu çalışıyor

String x = "22/06/2012";
String y = "25/10/2014";

String datestart = x;
String datestop = y;

//DateTimeFormatter format = DateTimeFormat.forPattern("dd/mm/yyyy");
SimpleDateFormat  format = new SimpleDateFormat("dd/mm/yyyy");

Date d1 = null;
Date d2 = null;

try {
    d1 =  format.parse(datestart);
    d2 = format.parse(datestop);

    DateTime dt1 = new DateTime(d1);
    DateTime dt2 = new DateTime(d2);

    //Period
    period = new Period (dt1,dt2);

    //calculate days
    int days = Days.daysBetween(dt1, dt2).getDays();


} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

1

Bunu yapmanın başka bir yolu:

String date = dateAndTime.substring(0, dateAndTime.indexOf(" "));

Tam olarak emin değilim, ama bu .split()yöntemi kullanmaktan daha hızlı olabilir / daha az bellek kullanabilir .

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.