Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SimpleDataFormat转换在某些日期失败_Java_Android - Fatal编程技术网

Java SimpleDataFormat转换在某些日期失败

Java SimpleDataFormat转换在某些日期失败,java,android,Java,Android,因此,我试图在我的Android应用程序中将日期字符串从一种格式转换为另一种格式。这里有一些代码 final String OLD_FORMAT = "d-MM"; final String NEW_FORMAT = "MMM d"; String oldDateString = "06-03"; Date d = sdf.parse(oldDateString); sdf.applyPattern(NEW_FORMAT); String newDateString = sdf.fo

因此,我试图在我的Android应用程序中将日期字符串从一种格式转换为另一种格式。这里有一些代码

 final String OLD_FORMAT = "d-MM";
 final String NEW_FORMAT = "MMM d";
 String oldDateString = "06-03";
 Date d = sdf.parse(oldDateString);
 sdf.applyPattern(NEW_FORMAT);
 String newDateString = sdf.format(d);
这非常有效,已正确转换为2006年3月。但是,如果我将oldDateString更改为“09-04”,它将崩溃

java.text.ParseException: Unparseable date: "09-04" (at offset 0)
我不知所措。有人知道是什么导致了这个问题吗

我为日期转换函数提供了一个列表,其中包含来自以下SQL查询的日期和值

String sql = "SELECT strftime('%d-%m', timestamp) as valDate, COUNT(*) FROM log GROUP BY valDate LIMIT 7";

干杯

你可以在这里找到一些例子

在这种情况下,您必须使用dd-MM


编辑:当日期从0到9时,正确的字符是“d”,当我们有00到09时,正确的方式是“dd”,月和年也是如此。

所以问题的原因完全是我的错,如果我发布了完整的代码,可能早就有人指出了这个问题

我的实际代码中也有一个while循环。。我把它从原来的帖子里删掉了,让它变得干净一点

SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT);
while (i < 10){
try{
 final String OLD_FORMAT = "d-MM";
 final String NEW_FORMAT = "MMM d";
 String oldDateString = "06-03";
 Date d = sdf.parse(oldDateString);
 sdf.applyPattern(NEW_FORMAT);
 String newDateString = sdf.format(d);
}
 ....
}
SimpleDataFormat sdf=新的SimpleDataFormat(旧的_格式);
而(i<10){
试一试{
最终字符串OLD_FORMAT=“d-MM”;
最终字符串NEW_FORMAT=“MMM d”;
字符串oldDateString=“06-03”;
dated=sdf.parse(oldDateString);
sdf.applyPattern(新的_格式);
字符串newDateString=sdf.format(d);
}
....
}

这导致了童车行为。但是,如果我将sdf定义移到while部分中,它工作得很好,因此我将标记此问题已解决。如果有人能解释为什么它会带来不同,那就太棒了。

你的Java版本、时区/地区和环境是什么?我用Java 6和8进行了测试,结果很好。也许完整的代码(包括创建
SimpleDataFormat sdf
)会有所帮助。SimpleDataFormat不是线程安全的。这可能是一个问题吗?我添加了为日期转换函数提供数据的代码。我不知道这为什么不起作用:请你解释一下
d-MM
dd-MM
之间的区别,以及为什么它在第一次约会时起作用?忘了提到我在使用安卓:我似乎不需要使用dd。无论如何,我试过了,但没有任何区别,考虑到第一个日期总是被正确解析,这是有意义的。当您调用
applyPattern
更改为新格式时,sdf在下一次迭代的顶部仍将使用新格式。你需要重新设置它。就个人而言,我会使用两个单独的SDF实例,一个用于旧实例,一个用于新实例(都是在循环之前创建的)。如果您要求,像
applyPattern
这样的方法不应该存在。