web-dev-qa-db-ja.com

Joda Timeライブラリを使って日付文字列をDateTimeオブジェクトに変換する

次の形式の文字列としての日付があります"04/02/2011 20:27:05"。私はJoda-Timeライブラリを使用していて、それをDateTimeオブジェクトに変換したいと思います。やった:

DateTime dt = new DateTime("04/02/2011 20:27:05")

しかし、私は次のようなエラーが出ます:

Invalid format: "04/02/2011 14:42:17" is malformed at "/02/2011 14:42:17"

上記の日付をDateTimeオブジェクトに変換する方法

229
Tom

DateTimeFormat を使用してください。

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime dt = formatter.parseDateTime(string);
446
Bozho

私はこれが古い質問であることを知っています、しかし私はそれを加えたいと思いました、JodaTime 2.0の時点で、あなたはこれをワンライナーで行うことができます:

DateTime date = DateTime.parse("04/02/2011 20:27:05", 
                  DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"));
62
stephen.hanson
DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");
20
Shawn Vader

私はコメントから好きな答えを選び、TimeZoneを追加しました。

String dateTime = "2015-07-18T13:32:56.971-0400";

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
        .withLocale(Locale.ROOT)
        .withChronology(ISOChronology.getInstanceUTC());

DateTime dt = formatter.parseDateTime(dateTime);
15
Ali Karaca

あなたのフォーマットは期待されるISOフォーマットではありません、あなたは試してみるべきです

DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime time = format.parseDateTime("04/02/2011 20:27:05");
13

DateTimeFormatのように、 SimpleDateFormat を使うこともできます。

Date startDate = null;
Date endDate = null;
try {
    if (validDateStart!= null) startDate = new SimpleDateFormat("MM/dd/yyyy HH:mm", Locale.ENGLISH).parse(validDateStart + " " + validDateStartTime);
    if (validDateEnd!= null) endDate = new SimpleDateFormat("MM/dd/yyyy HH:mm", Locale.ENGLISH).parse(validDateEnd + " " + validDateEndTime);
} catch (ParseException e) {
    e.printStackTrace();
}
5
efirat

あなたが使用しているフォーマットに適した DateTimeFormatter が必要です。作成方法についてはドキュメントを見てください。

袖口から、format = DateTimeFormat.forPattern("M/d/y H:m:s")が必要だと思います

3
Mark Tozzi

tl; dr

Java.time.LocalDateTime.parse( 
    "04/02/2011 20:27:05" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" )
)

Java.time

現代のアプローチは、由緒ある Joda-Time プロジェクトに取って代わるJava.timeクラスを使用します。

入力にタイムゾーンまたはUTCからのオフセットのインジケータがないため、 LocalDateTimename__ として解析します。

String input = "04/02/2011 20:27:05" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;

ldt.toString():2011-02-04T20:27:05

ヒント:可能な場合は、ここで見られる形式ではなく、日付/時刻値をテキストとして交換するときに標準の ISO 8601 形式を使用してください。便利なことに、Java.timeクラスは文字列を解析/生成するときに標準フォーマットを使用します。


Java.timeについて

Java.time フレームワークは、Java 8以降に組み込まれています。これらのクラスは、 Java.util.DateCalendarname__ 、& SimpleDateFormatname__ のような、面倒な古い レガシー date-timeクラスに代わるものです。

Joda-Time プロジェクトは現在 メンテナンスモード になっており、 Java.time クラスへの移行を推奨しています。

詳細は、 Oracleチュートリアル を参照してください。そして多くの例と説明についてはStack Overflowを検索してください。仕様は JSR 310 です。

Java.timeクラスはどこで入手できますか?

ThreeTen-Extra プロジェクトは、追加クラスでJava.timeを拡張します。このプロジェクトは、Java.timeに将来追加される可能性があることを証明するものです。 Intervalname__YearWeekname__YearQuartername__more など、便利なクラスがいくつかあります。

3
Basil Bourque

簡単な方法:

public static DateTime transfStringToDateTime(String dateParam, Session session) throws NotesException {
    DateTime dateRetour;
    dateRetour = session.createDateTime(dateParam);                 

    return dateRetour;
}
2
sissi49

これには2つの方法があります。

DateTimeFormat

DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");

SimpleDateFormat

        String dateValue = "04/02/2011 20:27:05";
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); //  04/02/2011 20:27:05

        Date date = sdf.parse(dateValue); // returns date object
        System.out.println(date); // outputs: Fri Feb 04 20:27:05 IST 2011
0
Dulith De Costa