Joda-Time DateTimeをmm / dd / yyyyだけにフォーマットする方法は?


189

文字列「11/15/2013 08:00:00」があります。「」にフォーマット設定します。11/15/2013正しいDateTimeFormatterパターンは何ですか?

私は多くのグーグルを試してみましたが、それでも正しいパターンを見つけることができません。

編集:JavaのSimpleDateFormatではなく、Joda-Timeを 探していDateTimeFormatterます。


2
tl; dr: DateTimeFormat.forPattern( "MM / dd / yyyy HH:mm:ss")。print(DateTime.now())
Andrew

回答:


385

城田時間

作成しDateTimeFormatter使用してDateTimeFormat.forPattern(String)

Joda時間を使用すると、次のようになります。

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));

標準Java≥8

Java 8では、新しい日付と時刻のライブラリが導入され、日付と時刻の扱いが簡単になりました。標準のJavaバージョン8以降を使用する場合は、DateTimeFormatterを使用します。にはタイムゾーンがないためStringjava.time.LocalDateTimeまたはLocalDateです。それ以外の場合は、タイムゾーン変数ZonedDateTimeおよびZonedDateを使用できます。

// 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));

標準Java <8

Java 8より前は、SimpleDateFormatjava.util.Dateを使用していました。

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
申し訳ありませんが、私はjodatimeのDateTimeFormatterを探しています。
iCodeLikeImDrunk 2013

1
@yaojiang Jodaはと同じフォーマット文字列構文を使用しますSimpleDateFormat。APIドキュメントを読みます。
Jesper、

@yaojiang Jesperが述べたように、Jodaは同じフォーマット文字列を使用しますが、オプションは他にもあります。ご覧のとおり、Jodaを含めるように例を拡張しました。
DeltaLima

不思議なことに、私はDateTimeFormatterを使用していますdtf = DateTimeFormat.forPattern( "MM / dd / yyyy"); それでも「mm / dd / yyyy hh:mm:ss」が表示される...
iCodeLikeImDrunk

2
Joda-Timeはjava.util.Date/Calendarと非常によく似たフォーマットコードを使用しますが、微妙な違いについてはドキュメントを注意深く読んでください。それらは同一ではありません。
バジルブルク2014

45

他の回答は完全に受け入れ可能ですが、ここに追加します。JodaTimeには、DateTimeFormatに事前に組み込まれたパーサーがあります。

dateTime.toString(DateTimeFormat.longDate());

これは、フォーマットとともに出力されるほとんどのオプションです。

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
これが導入されたバージョンはわかりましたか?愚かなフォーマット文字列を作成しないことで多くの時間を節約します...
iCodeLikeImDrunk 2016年

ええ、私は完全に同意します。それはいつもそこにあったようです。 joda-time.sourceforge.net/apidocs/org/joda/time/format/...
チャドビンガム


11

JodaTimeを使用している場合は、これでうまくいくと思います。

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);

私はここからこれの一部を得ました


ドキュメントへのリンクが古くなっています。正しいURLは次のとおりです。joda.org/joda-time/apidocs/org/joda/time/format/...
バジルボーク

1
@BasilBourqueはその指摘をありがとうD:今年の日ですが、私の「ドキュメントへのリンクは、」古くなっていない私がリンクされドキュメントが古くなっています。自分のためにドキュメントにリンクするのではなく、コードを取得したページにリンクしていました。これはたまたま古いドキュメントです。
帽子の男14

10

私は非常に馬鹿ですが、働くオプションがあります。文字列fullDate = "11/15/2013 08:00:00"がある場合。

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

それは簡単かつ迅速に動作するはずです。:)


ええ、間違いなくフォーマットを変更します。これは機能しますが、この場合のみです。
iCodeLikeImDrunk 2013

1
実際には予期された動作ではありませんが、その後、コードを見て誰も(あなたを含む)何もここで何をしたのか理解しません...
Sercan Ozdemir

3

更新しました:

できること:定数を作成する:

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

このDateTimeFormatは次のものからインポートしています:(それに注意してください)

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

次で日付を解析します:

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

以前:
DateTime.parse( "201711201515"、DateTimeFormat.forPattern( "yyyyMMddHHmm"))。toString( "yyyyMMdd");

日時が必要な場合:

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

2

これは機能します

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

これを行う別の方法は次のとおりです。

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

私は正確にはわかりませんが、これは.split()メソッドを使用するよりも高速/メモリ使用量が少ないと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.