2

String として SimpleDateFormat オブジェクトに渡された Timestamp 値を Time Value に変換したいのですが、解析不能な日付例外がスローされます。

The Value which i am passing is Thu Jan 1 17:45:00 UTC+0530 1970

以下に示すように、例外が発生しています。

java.text.ParseException: Unparseable date: "Thu Jan 1 17:45:00 UTC+0530 1970"

私が実装した以下のコードを見つけてください(動作していません):

static SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US);
static SimpleDateFormat inputFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US);
static SimpleDateFormat outputFormatTime = new SimpleDateFormat("HH:mm:ss");

public static String convertUtcDateStringToTime(String utcDateValue) throws Exception
    {
        Date parsedDate = dateFormat.parse(utcDateValue);
        String returnDate=outputFormatTime.format(inputFormat.parse(parsedDate.toString()));
        return returnDate;
    }

以下のコードを使用すると、私にとっては正常に動作しますが(Working)、回避したいDateの減価償却機能です..

@SuppressWarnings("deprecation")
public static String convertUtcDateStringToTime(String utcDateValue) throws Exception
{
    Date dateValue=new Date(utcDateValue);
    Date parsedDate = dateFormat.parse(dateValue.toString());
    String returnDate=outputFormatTime.format(inputFormat.parse(parsedDate.toString()));
    return returnDate;
}

見逃したロジックを実装するには、ガイドしてください。前もって感謝します。

4

3 に答える 3

3

フォーマット文字列がこのようなものである場合、回答に追加して

"EEE MMM dd HH:mm:ss z yyyy"

次に、入力文字列は

"Thu Jan 1 17:45:00 +0530 1970"

「UTC」は暗黙的にRFC 822 タイム ゾーンを参照するためスキップされることに注意してください。

于 2013-10-01T07:51:22.937 に答える
2

まず、2 番目のSimpleDateFormatオブジェクトはまったく必要ありません。余分な作業を行っていますが、これは必要ありません。したがって、この変数を削除します。

static SimpleDateFormat inputFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US);  // Not needed.

次にDateFormat#format(Date)、メソッドはDateオブジェクトを取ります。あなたはそれを渡していStringます。それはうまくいきません。そのため、上記のオブジェクトは必要ありません。再度行う必要はありませんinputFormat.parse(parsedDate.toString())


ここで、現在の文字列を解析するための形式は次のようになります。

"EEE MMM dd HH:mm:ss 'UTC'z yyyy"

UTCの前に引用符を付ける必要がありますz。または、より一般的なケースの場合:

"EEE MMM dd HH:mm:ss zZ yyyy"

したがって、コードは次のようになります。

static SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zZ yyyy", Locale.US);
static SimpleDateFormat outputFormatTime = new SimpleDateFormat("HH:mm:ss");

public static String convertUtcDateStringToTime(String utcDateValue) throws Exception
    {
        Date parsedDate = dateFormat.parse(utcDateValue);
        String returnDate=outputFormatTime.format(inputFormat);
        return returnDate;
    }
于 2013-10-01T07:32:03.733 に答える
1

入力dateformatする必要があります

SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zZ yyyy", Locale.US);

他のフォーマットはすべて、要件に基づいて自由に設定できます。

于 2013-10-01T07:35:47.963 に答える