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.