Java SimpleDataFormat转换在某些日期失败
因此,我试图在我的Android应用程序中将日期字符串从一种格式转换为另一种格式。这里有一些代码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
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
这样的方法不应该存在。