2017-02-02 18 views
1

私はWikidataからデータを読んでいます。これらは、ISO 8601仕様を使用したP585の時間特性を表します。しかし、同じ存在が+である。ISO 8601の日付時刻文字列をjava.util.LocalDateTimeに変換するにはどうすればよいですか?

私がJodaを使用していた場合、Stringをjoda dateTimeに変換するのは非常に簡単でした。私はLocalDateTime.parse("+2017-02-26T00:00:00Z")を行う際

new DateTime(dateTime, DateTimeZone.UTC); 

は、しかし、私はインデックス0の位置にある文字を解析できないというエラーを取得しジョダがエラーなしでかなり簡単にそれをしないのJava 8の理由はあります。

また、私はLocalDateTime.parse("+2017-02-26T00:00:00Z", DateTimeFormatter.ISO_DATE_TIME)を試しましたが、無駄でした。

文字列操作でプラス記号を削除する必要はありません。

+1

解析する前に先頭のプラス記号を取り除くことはできますか? 'str.replaceAll("^\\ + "、" ")'を解析してみてください。 – Bohemian

+2

この形式の "+"の意味は何ですか? –

+0

プラスは年が署名されていることを意味します。 – dhamechaSpeaks

答えて

1

JavaのDateTimeFormatterクラスが役に立ちます。ここで私はあなたの問題をaddressses(または少なくともあなたについて考えるために何かを与える)と考えているいくつかのサンプルコードは次のとおりです。

class DateTimeTester { 
    --- 
    public static void main(String[] args) { 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("+yyyy-MM-dd'T'HH:mm:ss'Z'") 
     .withZone(ZoneId.of("UTC")); 
    LocalDateTime date = LocalDateTime.parse("+2017-02-26T01:02:03Z", formatter); 
    System.out.println(date); 
    } 
} 

の詳細については、フォーマットと解析javadoc for DateTimeFormatterでためパターン項を参照してください書式文字列はDateTimeFormatter.ofPattern()に渡されます。注意すべき

何か: ISO 8601に似たタイムスタンプとして表さ時点ため

「明示的な値、例えば+ 2013-01-:

Wikidata's list of available data typestimeデータ型について語ります01T00:00:00Z。年は常に署名され、4〜16桁の数字で埋められます "。

だから、ウィキデータのtimeデータのみを入力するには、あなたのコードは、(年0前)負の年を処理する必要がある場合、あなたはそれに応じて私の提案された解決策を調整する必要があります ISO 8601

に似ています。

+0

あなたの答えをありがとう。意味あり。私はboda.timeがjoda.timeと同じようにDataFormatterなしで自動的にこれを処理することを期待していました。それにもかかわらず、説明と答えに感謝します。これを正解とするにはどうすればよいですか? – dhamechaSpeaks

関連する問題