2015-03-06 5 views
0

Так что я пытаюсь преобразовать строку даты из одного формата в другой в своем приложении для Android. Вот какой код.Ошибка преобразования SimpleDateFormat в определенные даты

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); 

Это прекрасно работает и правильно преобразовано в Мары 06. Однако, если я изменю 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"; 

Cheers!

+0

Какова ваша версия Java, часовой пояс/язык и среда? – Kayaman

+3

Я тестировал с Java 6 и 8 - и он работает. Возможно, полный код (включая создание 'SimpleDateformat sdf') поможет. – CoronA

+0

SimpleDateFormat не является потокобезопасным. Это может быть проблема? – Thilo

ответ

-1

Вы можете найти некоторые примеры здесь http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

В этом случае вы должны использовать ДД-ММ

EDIT: Когда день от 0 до 9 правый символ «d», когда мы имеем С 00 по 09 правильный путь - это «дд», то же самое с месяцами и годами.

+0

Можете ли вы объяснить разницу между 'd-MM' и' dd-MM' и почему она сработала для этой первой даты? – Thilo

+0

Забыл упомянуть Im, работающий с Android: http://developer.android.com/reference/java/text/SimpleDateFormat.html Не похоже, что мне нужно использовать dd. Во всяком случае, я пробовал, и это не имело никакого значения, что имеет смысл, учитывая, что первая дата всегда корректно анализируется. – ardevd

0

Так что проблема была полностью моей виной, и если бы я опубликовал полный код, который кто-то, вероятно, давно бы указал на проблему.

Мой реальный код имеет петлю в то время как там, как хорошо .. Я разделся его из оригинального поста, чтобы дезинфицировать его немного

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); 
} 
.... 
} 

Это привело к поведению багги. Однако, если я перехожу к определению sdf внутри секции while, он отлично работает, поэтому я считаю, что это разрешено. Было бы здорово, если бы кто-нибудь мог объяснить, почему это имеет значение.

+0

Когда вы вызываете 'applyPattern' для перехода в новый формат, sdf будет по-прежнему иметь этот новый формат в верхней части следующей итерации. Вам нужно будет сбросить его. Лично я бы использовал два отдельных экземпляра SDF, один для старого, один для нового (оба созданные до цикла). Если вы спросите меня, такой метод, как 'applyPattern', не должен существовать. – Thilo

Смежные вопросы