У меня есть приложение для Android, которое выводит csv с несколькими сотнями строк в секунду. Каждая строка имеет метку, которая в основном генерируется так:Java SimpleDateFormat добавляет случайные нули
String formatTimeStamp (Calendar cal)
{
SimpleDateFormat timeFormatISO = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
return timeFormatISO.format(cal.getTime());
}
Некоторые временные метки (возможно, один на тысячу) имеют неожиданные нули в них и выглядеть примерно так:
2016-04-12T09 : 0011: 30
2016-04-12T0009: 0011: 30
2016-04-0012T09: 11: 30
Влияния кажутся совершенно произвольными, по крайней мере Я не вижу ни одной картины позади них. Иногда между двумя неправильными линиями существует несколько тысяч строк, иногда есть только один.
Формат даты определен только в одном месте в коде.
Edit:
являются неисправными метками времени моего последнего запуска, только так вы посмотрите на него можно. Единственное, что я заметил о них, это то, что это всегда два ведущих нуля перед элементом даты, но не перед годом.
Редакция 2:
Проблема решена! Оказывается, SimpleDateFormat не является потокобезопасным и делает странные вещи в строках при неправильном использовании. Я не знал, что многопоточность будет проблемой, поэтому я не указал ее в первоначальном вопросе. Прошу прощения за путаницу.
Уверены ли вы, что проблема не в написании файла? –
«SimpleDateFormat» явно протестирован и проверен. Я также буду исследовать процедуру ввода-вывода. – Shlublu
Нет, я не уверен.Но моя рутина IO тоже ничего необычного. У меня просто есть FileOutputStream, в котором я .write (myString.getBytes()); – karpfen