SimpleDateFormat时区解析
问题描述:
我有一个艰难的时间解析这个日期它的+0在最后导致一个问题,有谁知道什么是我的格式字符串错?如果我从日期字符串中删除了+0,并从格式字符串中删除了Z,那么很不幸,对于我的应用程序来说这不是一个选项。SimpleDateFormat时区解析
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
SimpleDateFormat dateFormater = new SimpleDateFormat("E, dd MMM yyyy kk:mm:ss zZ");
try {
Date d = dateFormater.parse("Sun, 04 Dec 2011 18:40:22 GMT+0");
System.out.println(d.toLocaleString());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答
如果格式是一致的,你可以追加到0:00
日期字符串。
String dateString = "Sun, 04 Dec 2011 18:40:22 GMT+0";
SimpleDateFormat sdf = new SimpleDateFormat("E, dd MMM yyyy kk:mm:ss z", Locale.ENGLISH);
Date date = sdf.parse(dateString + "0:00");
System.out.println(date);
(请注意,我固定SimpleDateFormat
建设,明确指定其将用于解析一周和一个月名当天的语言环境,否则可能无法在不使用英语作为默认语言环境平台;我也想知道,如果你不actually需要HH
代替kk
,但抛开)
答
一种方法是使用普通字符串处理技术,将您的字符串从你期望的形式的形式把所SimpleDateFormat
会明白。您还没有确切的说什么范围的时区格式是可以接受的,但一种可能是这样的:
private static Date parse(String dateString) throws ParseException
{
final SimpleDateFormat dateFormat =
new SimpleDateFormat("E, dd MMM yyyy kk:mm:ss Z");
dateString = dateString.replaceAll("(GMT[+-])(\\d)$", "$1\\0$2");
dateString = dateString.replaceAll("(GMT[+-]\\d\\d)$", "$1:00");
return dateFormat.parse(dateString);
}
,将支持GMT加或减一或二位数字的小时偏移,此外还支持SimpleDateFormat
已支持的任何内容,例如EST
或GMT+1030
。
或者,如果你知道它永远是GMT,那么你可以设置格式化的时区,而忽略了时区的字符串:
private static Date parse(String dateString) throws ParseException
{
final SimpleDateFormat dateFormat =
new SimpleDateFormat("E, dd MMM yyyy kk:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
return dateFormat.parse(dateString);
}
您也可以分割区别。我注意到您的字符串中的时区格式与TimeZone.getTimeZone()
预期的相符。那是故意的吗?如果是这样,你可以抓住该时区格式出的字符串,它传递给dateFormat.setTimeZone
事前,然后实际的解析过程中忽略它:
private static Date parse(final String dateString) throws ParseException
{
final SimpleDateFormat dateFormat =
new SimpleDateFormat("E, dd MMM yyyy kk:mm:ss");
if(dateString.indexOf("GMT") > 0)
dateFormat.setTimeZone
(
TimeZone.getTimeZone
(dateString.substring(dateString.indexOf("GMT")))
);
return dateFormat.parse(dateString);
}
http://home.tiscali.nl/bmc88/java/ sbook/035.html这里他们创建一个自定义的日期格式 – 2011-12-04 19:24:12