В настоящее время я читаю файл данных по строкам. Каждая строка имеет метку времени в формате дд/мм/гггг чч: мм:. Сс» мне нужно преобразовать это в милли секунд с начала отсчета я попробовал два способаПреобразование временной метки в миллисекунд с эпохи
1> Использование стандартной библиотеки
timestamp = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.ENGLISH).parse(ddMMyyyy + " " + HHmmss);
return timestamp.getTime();
2> Это использование Joda-Time Library
jiffy = format.parseMillis(ddMMyyyy + " " + HHmmss);
После профилирования, я обнаружил, что метод один невероятно дорого, тогда как методы два немного дешевле, чем первый, но все еще дорого. первые из них принимает Aprox 1600 мс процессорного времени и второй занимает 1100 мс процессорного времени.
Вопросы -
1> Есть ли лучше библиотека, которая не стоит так дорого?
2> Если нет стандартной библиотеки, может ли кто-нибудь указать мне на логику преобразования? Я пробовал искать, но ничего не добился. На этом сайте есть несколько формул, но они не работают или позволяют назвать это, но они недостаточно просты.
Благодаря
**
Добавление большего количества деталей на вопрос
**
ok..adding подробнее здесь. Испытательный прогон рассчитан на 10 миллионов записей. Каждая строка имеет временную метку, которая должна быть преобразована в миллисекунд с эпохи.
Вот три версии кода, которые я пробовал.
1> С Joda-Time - Пока лучший результат, но неприемлем. Он тратит 26,9% времени на преобразование во времени.
long jiffy = 0;
public double getTime(String ddMMyyyy, String HHmmss) throws ParseException
{
jiffy = format.parseMillis(ddMMyyyy + " " + HHmmss);
return jiffy/1000;
}
Вот профилирование http://postimg.org/image/bvrt3esgr/
2> С класса SimpleTimeFormat Java. Если вы снова используете тот же объект, что и 36,1% выполнения этой задачи.
private long timestamp;
public static final SimpleDateFormat SDF = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss",Locale.ENGLISH);
long jiffy = 0;
public double getTime(String ddMMyyyy, String HHmmss) throws ParseException
{
timestamp = SDF.parse(ddMMyyyy + " " + HHmmss).getTime();
return timestamp;
}
Вот профиль http://postimg.org/image/72iua8x9j/ 3> С класса SimpleTimeFormat Java. Если я создаю новый объект, то для выполнения этой задачи требуется 51,6%.
public long getTimei(String ddMMyyyy, String HHmmss) throws ParseException
{
timestamp = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.ENGLISH).parse(ddMMyyyy + " " + HHmmss);
return timestamp.getTime();
}
Вот профиль postimg.org/image/rnp2m1c2r/
Теперь мои вопросы все те же ???
1> Есть ли лучше библиотека, которая не так дорого?
2> Если нет стандартной библиотеки, может ли кто-нибудь указать мне на логику преобразования? Я пробовал искать, но ничего не добился. На этом сайте есть несколько формул, но они не работают или позволяют назвать это, но они недостаточно просты.
1100 млн. За сколько значений? 2? 2 миллиарда? Чтение строк из файла, вероятно, будет намного дольше (читайте на несколько порядков медленнее), чем в любом случае обрабатывать даты, поэтому оптимизация синтаксического анализа не приведет к какой-либо измеримой разнице. –
Если вы только измеряете один раз, ваша JVM не нагревается.Сделайте правильный тест. –
добавив подробнее подробнее .. – Nishant