如何解析日期包含语言环境的字符串

问题描述:

我有一个日期字符串“星期六1月28日00:00:00 IST 2012”,我试图用Joda的DateTimeFormatter解析它。我有以下代码,不知道在哪里,它出错了。如何解析日期包含语言环境的字符串

DateTimeFormatter dateFmt = DateTimeFormat 
      .forPattern("EEE MMM dd HH:mm:SS ZZZ yyyy"); 
DateTime dateTime = dateFmt.parseDateTime(dateString); 

异常:java.lang.IllegalArgumentException异常:无效的格式为: “周六1月28日00:00:00 IST 2012” 在 “2012 IST” 格式不正确。请帮我解决这个问题。谢谢你的帮助。

我不知道为什么,但它工作,如果我用SimpleDateFormat代替DateTimeFormatter

CODE:

public static void main(String[] args) throws ParseException { 
     String FORMAT = "EEE MMM dd HH:mm:SS zzz yyyy"; 
     String dateString = "Sat Jan 28 00:00:00 IST 2012"; 
     SimpleDateFormat dateFormat = new SimpleDateFormat(FORMAT); 
     Date date = dateFormat.parse(dateString); 
     System.out.println(new DateTime(date)); 
     DateTimeFormatter dateFmt = DateTimeFormat.forPattern(FORMAT); 
//  System.out.println(dateFmt.parseLocalDateTime(dateString)); 
//  System.out.println(dateFmt.parseDateTime(dateString)); 
     System.out.println(dateFmt.parseLocalTime(dateString)); 
    } 

IST不被认可的API时区,它只能识别所在时区的一个从getAvailableIds()

+0

如果你的意思是当时的印度标准时间可能会调用'公共静态的String [] getAvailableIDs(INT rawOffset)'和'5.5',看看它返回,应该有像' Kolkatta /印度'不确定,看看它 – 2012-03-30 15:14:20

+0

嘿,IST在那里,我只是试图打印所有这些。 (字符串字符串:TimeZone.getAvailableIDs()){ \t \t \t System.out.println(string); \t \t}' – Ahamed 2012-03-30 15:17:29

+0

然后只是将'ZZZ'替换为'zzz',就像Matt建议的那样 – 2012-03-30 15:18:03

使用zzz(小写),不ZZZ(大写)。从the API docs

z time zone    text  Pacific Standard Time; PST 
Z time zone offset/id zone  -0800; -08:00; America/Los_Angeles