У меня есть дата внутри строки, что-то вроде «12 декабря 2012 года». Как я могу преобразовать это в миллисекунды (долгие)?
Как преобразовать строку Date в длинные миллисекунды
Ответы (8)
Использование SimpleDateFormat
String string_date = "12-December-2012";
SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
try {
Date d = f.parse(string_date);
long milliseconds = d.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
Пора дать современный ответ на этот вопрос. В 2012 году, когда был задан вопрос, ответы, также опубликованные тогда, были хорошими ответами. Почему в ответах, опубликованных в 2016 году, также используются давно устаревшие классы SimpleDateFormat
и Date
, для меня немного больше загадка. java.time
, современный API даты и времени Java, также известный как JSR-310, намного приятнее работать. Вы можете использовать его на Android через ThreeTenABP, см. этот вопрос: Как использовать ThreeTenABP в Android Project.
В большинстве случаев я рекомендую использовать миллисекунды с момента начала дня по всемирному координированному времени. Чтобы получить их:
DateTimeFormatter dateFormatter
= DateTimeFormatter.ofPattern("d-MMMM-uuuu", Locale.ENGLISH);
String stringDate = "12-December-2012";
long millisecondsSinceEpoch = LocalDate.parse(stringDate, dateFormatter)
.atStartOfDay(ZoneOffset.UTC)
.toInstant()
.toEpochMilli();
System.out.println(millisecondsSinceEpoch);
Это печатает:
1355270400000
Если вам требуется время в начале дня в каком-то конкретном часовом поясе, укажите этот часовой пояс вместо UTC, например:
.atStartOfDay(ZoneId.of("Asia/Karachi"))
Как и ожидалось, это дает немного другой результат:
1355252400000
Еще одно замечание: не забудьте указать локаль для вашего DateTimeFormatter
. Я решил, что декабрь будет английским, есть и другие языки, где этот месяц называется так же, поэтому, пожалуйста, выберите подходящий язык самостоятельно. Если вы не указали языковой стандарт, средство форматирования будет использовать настройку локали JVM, которая может работать во многих случаях, а затем неожиданно выйдет из строя однажды, когда вы запустите приложение на устройстве с другой настройкой языкового стандарта.
Взгляните на класс SimpleDateFormat
, который может анализировать String
и возвращать Date
и метод getTime
класса Date
.
- Сначала преобразуйте строку в
java.util.Date
, используя дату форматировщик - Используйте getTime (), чтобы получить количество миллисекунд. с даты
вы можете использовать simpleDateFormat для анализа даты в строке.
Самый простой способ - использовать Date Using Date () и getTime ()
Date dte=new Date();
long milliSeconds = dte.getTime();
String strLong = Long.toString(milliSeconds);
System.out.println(milliSeconds)
используя simpledateformat, вы можете легко этого добиться.
1) Сначала преобразуйте строку в java.Date с помощью simpledateformatter.
2) Используйте метод getTime, чтобы получить количество миллисекунд с даты
public class test {
public static void main(String[] args) {
String currentDate = "01-March-2016";
SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
Date parseDate = f.parse(currentDate);
long milliseconds = parseDate.getTime();
}
}
подробнее Пример нажмите здесь
Попробуйте под кодом
SimpleDateFormat f = new SimpleDateFormat("your_string_format", Locale.getDefault());
Date d = null;
try {
d = f.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
long timeInMillis = d.getTime();