2

我想将作为字符串传递给 SimpleDateFormat 对象的时间戳值转换为时间值,但它会引发不可解析的日期异常。

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

Bur 我得到一个例外,如下所述:

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;
    }

如果我使用下面的代码,它对我来说很好(工作),但它是我想避免的 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

首先,您的第二个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之前给出 in 引号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 回答