У меня есть дата внутри строки, что-то вроде «12 декабря 2012 года». Как я могу преобразовать это в миллисекунды (долгие)?
источник
У меня есть дата внутри строки, что-то вроде «12 декабря 2012 года». Как я могу преобразовать это в миллисекунды (долгие)?
Использование 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();
}
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();
Пора дать современный ответ на этот вопрос. В 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
датывы можете использовать 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();