java.text.ParseException:Unparseable date在java中将timestamp值转换为time时的异常

时间:2013-10-01 07:18:06

标签: java timestamp deprecated simpledateformat

我想将作为String传递给SimpleDateFormat对象的Timestamp值转换为Time Value,但它会抛出一个Unparseable日期异常。

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

如果我使用下面的代码,它对我(工作)很好,但它是我想避免的日期的折旧函数..

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

请指导我实施我错过的逻辑。提前谢谢。

3 个答案:

答案 0 :(得分:3)

如果格式化字符串是这样的,则添加答案

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

那么你的输入字符串应该是

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

请注意,“UTC”会被隐含,因为它会引用RFC 822 time zone

答案 1 :(得分: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;
    }

答案 2 :(得分:1)

您输入dateformat需要

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

根据您的要求,其他格式都是最重要的。