1

次のタイプの日付を解析したい:

2010-07-13T17:27:00.000Z

Javaで単純な日付フォーマッタを使用するにはどうすればよいですか? 使用する形式は何ですか?

4

3 に答える 3

5
  1. SimpleDateFormatの javadoc を見てください。
  2. コンストラクターで適切な文字列を使用して、このクラスのインスタンスを作成します
  3. parseメソッドを呼び出して、質問の文字列を渡します
  4. ???
  5. 利益!

(実際にはフォーマット文字列を提供していないことに気付くかもしれません。これは「男に魚を教える」という答えです。特定のセクションで何を使用する必要があるかを具体的に理解するのに問題がある場合は、お気軽に詳細を説明し、何を試し、なぜうまくいかなかったのかを述べます. しかし、今のところ、特定のフォーマット文字列を試す段階には達していないようです. Javadocs はかなりよく書かれており、必要なものがすべて含まれています.ドキュメントから情報を抽出できることは、プログラマーにとって非常に重要なスキルであり、それを改善する機会を奪うつもりはありません。)

于 2010-07-16T14:44:11.803 に答える
1

コードは次のコードのようになります。

日付文字列 " 2010-07-13T17:27:00.000Z" には、この形式 " yyyy-MM-dd'T'hh:mm:ss.S'Z'" を試すことができます。

日付文字列の「T」と「Z」は定数/区切り記号のみであると想定しています。

import java.text.SimpleDateFormat;
import java.util.Date;

public class TestMain {

    public static void main(String[] args) throws Exception{

        String fromDateTime = "2010-12-01 00:01:23";
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
        Date date = null;

        date = format.parse(fromDateTime);
        //What ever you want to manipulate of this date object
        //... 

    }
}

編集:適切なクラス、メソッド、コメントを追加して、完全なプログラムにします。@Andrzej Doyle からのコメントに感謝します。編集: 削除すると、デモ プログラムから IOException がスローされます。@BalusC に感謝します。編集:コメントを読み直して、@BalusCの完全な意味を理解してください:)

于 2010-07-16T15:12:42.797 に答える
1

日時文字列は、 ISO 8601日時パターンに2010-07-13T17:27:00.000Z準拠しています。この文字列では、 は日付と時刻の区切り記号であり、UTC (時間のタイムゾーン オフセット) を指定する Zulu を表します。この日時文字列を解析するために必要な形式は次のとおりです。TZ+00:00

yyyy-MM-dd'T'HH:mm:ss.SSSX 

パターンの詳細については、ドキュメンテーション ページを参照してください。

従来の日時 API (java.util日時型とその書式設定 API SimpleDateFormat) は古く、エラーが発生しやすいことに注意してください。java.timeそれらの使用を完全にやめて、最新の日時 API *に切り替えることをお勧めします。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.TimeZone;

public class Main {
    public static void main(String args[]) throws ParseException {
        String strDateTime = "2010-07-13T17:27:00.000Z";

        Instant instant = Instant.parse(strDateTime);
        ZonedDateTime zdt = ZonedDateTime.parse(strDateTime);
        OffsetDateTime odt = OffsetDateTime.parse(strDateTime);

        System.out.println(instant);
        System.out.println(zdt);
        System.out.println(odt);

        // #################Using legacy API####################
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
        Date date = sdf.parse(strDateTime);
        // Default format
        System.out.println(date);
        // Custom format
        sdf.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
        System.out.println(sdf.format(date));
        // #####################################################
    }
}

出力:

2010-07-13T17:27:00Z
2010-07-13T17:27Z
2010-07-13T17:27Z
Tue Jul 13 18:27:00 BST 2010
2010-07-13T17:27:00.000Z

DateTimeFormatter現代の日付/時間のデフォルト パターンは ISO 8601 標準に従っており、ISO 8601 の日付/時間文字列を解析するために(SimpleDateFormat現代の日付/時間 API の対応する) を明示的に必要としないことに注意してください。最新の日時 API の詳細については、Trail: Date Timeを参照してください。

ここで言及すべきもう 1 つの重要な点は、オブジェクトが、最新の日時型のjava.util.Dateような実際の日時オブジェクトではないということです。むしろ、「エポック」(または UTC) として知られる標準ベース時刻からのミリ秒数を表します。のオブジェクトを出力すると、そのメソッドは、このミリ秒値から計算された JVM のタイムゾーンで日時を返します。異なるタイムゾーンで日時を出力する必要がある場合は、タイムゾーンを に設定し、そこからフォーマットされた文字列を取得する必要があります。January 1, 1970, 00:00:00 GMTjava.util.DatetoStringSimpleDateFormat


* 何らかの理由で、Java 6 または Java 7 に固執する必要がある場合は、ほとんどのjava.time機能を Java 6 および 7 にバックポートするThreeTen-Backportを使用できます。Androidプロジェクトと Android API で作業している場合レベルはまだ Java-8 に準拠していません。desugarで利用できる Java 8+ APIと Android プロジェクトで ThreeTenABP を使用する方法 を確認してください。

于 2021-04-28T19:21:27.190 に答える