1. ホーム
  2. java

[解決済み] Java: 解析不能な日付例外

2022-02-04 12:56:35

質問

日付フォーマットを変換しようとすると、例外:unparseable dateが発生し、この問題を修正する方法がわかりません。

イベントの日付を表す文字列を受信しており、この日付をGUIで異なるフォーマットで表示したいのですが。

私が行おうとしていたのは、以下のようなことです。

private String modifyDateLayout(String inputDate){
        try {
            //inputDate = "2010-01-04 01:32:27 UTC";
            Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate);
            return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date);
        } catch (ParseException e) {
            e.printStackTrace();
            return "15.01.2010";
        }
    }

とりあえず一行

String modifiedDateString = originalDate.toString();

はダミーです。以下のような書式で日付文字列を取得したい。

dd.MM.yyyy HH:mm:ss

で、入力Stringの例は以下の通りです。

2010-01-04 01:32:27 utc

上記の例の日付(String)をStringフォーマット dd.MM.yyyy HH:mm:ss に変換する方法をご存知の方はいらっしゃいますか?

ありがとうございました。

編集:入力された日付の形式が間違っていたのを直しましたが、まだうまくいきません。上記は貼り付けたメソッド、下記はデバッグ時の画面イメージです。

アルトテキスト http://img683.imageshack.us/img683/193/dateproblem.png

#更新 を実行しました。

String[] timezones = TimeZone.getAvailableIDs();

で、配列の中にUTC Stringがあります。不思議な問題です。

汚いハックをしたらうまくいきました。

private String modifyDateLayout(String inputDate){
    try {
        inputDate = inputDate.replace(" UTC", "");
        Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(inputDate);
        return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date);
    } catch (ParseException e) {
        e.printStackTrace();
        return "15.01.2010";
    }
}

しかし、それでも私は、タイムゾーンを切り取ることなく、元の入力を変換することを希望します。

このコードは、JDK 1.6を使用したAndroid携帯電話用に書かれています。

解決するには?

基本的にここでやっていることは Date#toString() は、すでに固定パターンを持っています。を変換するには、Javaの Date オブジェクトを人間が読みやすい別のStringパターンに変換するには SimpleDateFormat#format() .

private String modifyDateLayout(String inputDate) throws ParseException{
    Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate);
    return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date);
}

ちなみに、quot;unparseable date"例外はここで発生する可能性があります。 のみ によって投げられます。 SimpleDateFormat#parse() . これはつまり inputDate は期待されたパターンではありません "yyyy-MM-dd HH:mm:ss z" . に一致するようにパターンを修正する必要がありそうです。 inputDate の実際のパターンです。

更新してください。 よし、テストしてみた。

public static void main(String[] args) throws Exception {
    String inputDate = "2010-01-04 01:32:27 UTC";
    String newDate = new Test().modifyDateLayout(inputDate);
    System.out.println(newDate);
}

これは正しくプリントされます。

03.01.2010 21:32:27

(私はGMT-4を使用しています)

アップデート2 あなたの編集のように、あなたは本当に ParseException ということです。一番怪しいのは、タイムゾーンの UTC . これは実際に 既知の を、お使いのJava環境で実行していますか?お使いのJavaのバージョンとOSのバージョンは何ですか?確認事項 TimeZone.getAvailableIDs() . が必要です。 UTC を挟んでいます。