我想将作为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;
}
请指导我实施我错过的逻辑。提前谢谢。
答案 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);
根据您的要求,其他格式都是最重要的。