我正在尝试使用Java中的时区字符串解析时间戳。我的字符串是:
"2013-01-01 15:30:00.2 +05:00"
"2003-01-01 02:59:04.123 -8:00"
这是我解析它的代码:
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z");
simpleDateFormat.parse("2013-01-01 15:30:00.2 +05:00");
但是,当我运行代码时,我收到此错误消息:
java.text.ParseException: Unparseable date: "2013-01-01 15:30:00.2 +05:00"
我也尝试使用以下代码来解析它:
DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTimeNoMillis();
DateTime dateTime = dateTimeFormatter.parseDateTime("2003-01-01 02:59:04.123 -8:00");
Timestamp timeStamp = new Timestamp(dateTime.getMillis());
这给了我例外:
Invalid format: "2003-01-01 02:59:04.123 -8:00" is malformed at " 02:59:04.123 -8:00"
我还尝试在日期之后在字符串中插入'T',但它也提供了无效的格式异常:
Invalid format: "2003-01-01T02:59:04.123 -8:00" is malformed at " .123 -8:00"
这一定非常简单 - 我不知道我哪里出错了。
感谢您的帮助!
答案 0 :(得分:0)
你只是在SimpleDateFormat中犯了一个错误(yyyy-MM-dd HH:mm:ss.SSS z ), 哪里' z'接受带有常规时区演示文稿的TimeZone。一般时区接受:
GMTOffsetTimeZone:
GMT Sign Hours : Minutes
Sign: one of
+ -
Hours:
Digit
Digit Digit
Minutes:
Digit Digit
Digit: one of
0 1 2 3 4 5 6 7 8 9
但是你提到+5:00应该是GMT + 5:00。
还有' Z' 和' X' 来代表SimpleDateFormat中的TimeZone,它接受RFC 822 time zone和分别为ISO 8601 time zone。
答案 1 :(得分:0)
尝试下面的代码:只需输入GMT + 5:30而不是+5:30
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo {
// main method
public static void main(String[] args) {
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z");
Date d = simpleDateFormat.parse("2013-01-01 15:30:00.2 GMT+05:00");
System.out.println(d);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}