解析日期,CET与CEST,无效TimeZone,不可解析

时间:2016-06-22 08:59:27

标签: java sqlite date codenameone

我正在使用shannah的数据访问库通过他的DAO接口访问我的对象。

一旦我的东西在数据库中,当调用unmap方法时,解析日期值时会遇到一个非常奇怪的行为。它只在CEST(中欧夏令时)上失败

我尝试使用NumberUtil.dateValue方法来解析它,但它仍然失败......

 java.lang.RuntimeException: Failed to parse string date format Thu Mar 31 00:00:00 CEST 2016.  Could not find appropriate format parser.

我将DateFormat定义为

        dateFormats[0] = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
        dateFormats[1] = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy");
        dateFormats[2] = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZZ yyyy");
        dateFormats[3] = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy");

也尝试修剪String但它没有帮助。

我没有想法,因为SDF没有将构造函数作为普通JDK,第二个参数是Locale。

2 个答案:

答案 0 :(得分:1)

// Method that take date time string , input pattern and out put pattern,that return formatted date as string

public String parseDate(String dateTime,String inputPattern, String outputPattern) throws ParseException {

    SimpleDateFormat inputFormat = new SimpleDateFormat(inputPattern, Locale.ENGLISH);
    SimpleDateFormat outputFormat = new SimpleDateFormat(outputPattern);

    Date date = inputFormat.parse(dateTime);
    String str = outputFormat.format(date);

    return str;
}
// call method
String date = parseDate("Thu Mar 31 00:00:00 CEST 2016" ,"EEE MMM dd HH:mm:ss zzz yyyy", "MM-dd-yyyy:HH:mm:ss");

// print date
System.out.println(date);

// Result 
03-31-2016:03:00:00

答案 1 :(得分:0)

我现在为这个问题做了一个解决方法,我仍然可以进一步开发我的api和东西,但说实话我不喜欢这个修复,因为我认为它会在以后的时区产生一些问题。

有更多经验的人可以告诉我有关此修复的任何信息,如果它可能导致TimesZon​​es和夏季/冬季时间出错吗?

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy");
String dateValue = plannedDate;
String year = dateValue.substring(dateValue.length() - 4);
dateValue = dateValue.substring(0, 20);
dateValue += year;
this.plannedDate = sdf.parse(dateValue);

欢迎任何建议或可能的修复(y)