Строковая дата в эпоху
Я немного запутался в датах. В настоящее время я работаю над погодным приложением, и все работает отлично. Я просто хочу перевести этот тип формата в свой желаемый формат.
2017-09-10T18:35:00+05:00
Я просто хочу преобразовать эту дату в Великую Эпоху, а затем устанавливаю дату в моем формате желаний:
для J-SON
или я хочу преобразовать эту дату в меньшую цифру, например, Солнце, 9 сентября, 9:23 и т. д.
4 ответа
Использовать SimpleDateFormat
экземпляр для разбора строки в Date
объект:
DateFormat parser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
Date date = parser.parse("2017-09-10T18:35:00+05:00");
А затем используйте другой SimpleDateFormat для его отображения:
DateFormat format = new SimpleDateFormat("EEE, dd MMMMM h:mm a");
String formatted = format.format(date); // Sun, 10 September 1:35 PM
ThreeTenABP
Другие ответы верны, но устарели до того, как были написаны. В эти дни я рекомендую вам использовать современный API даты и времени Java, известный как JSR-310 или java.time
, Ваш формат строки даты и времени - ISO 8601, который современные классы "понимают" как значения по умолчанию.
Можете ли вы использовать современный API на Android еще? Несомненно! Классы JSR-310 были перенесены на Android в проекте ThreeTenABP. Все детали в этом вопросе: Как использовать ThreeTenABP в Android Project.
long epochTime = OffsetDateTime.parse("2017-09-10T18:35:00+05:00")
.toInstant()
.getEpochSecond();
Результат 1505050500.
Пример того, как преобразовать это в удобочитаемую дату и время:
String formattedDateTime = Instant.ofEpochSecond(epochTime)
.atZone(ZoneId.of("Africa/Lusaka"))
.format(DateTimeFormatter.ofPattern("EEE, d MMMM h:mm a", Locale.ENGLISH));
Это производит Sun, 10 September 3:35 PM
, Укажите правильный регион и город для нужного идентификатора часового пояса. Если вы хотите положиться на настройку часового пояса устройства, используйте ZoneId.systemDefault()
, См. Документацию DateTimeFormatter.ofPattern() для получения букв, которые вы можете использовать в строке шаблона формата или использовать DateTimeFormatter.ofLocalizedDateTime()
для одного из форматов по умолчанию вашей локали.
String time_at_which_weather_capture = "Time : ";
DateFormat dateFormat = new SimpleDateFormat("EEE,d M yyyy h:MM a");
long timeInMillieSec = 0 ;
try {
Date date = dateFormat.parse(readyToUpdate.getTime());
timeInMillieSec = date.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
time.setText(time_at_which_weather_capture + String.valueOf(time_fetcher(timeInMillieSec)));
public String time_fetcher (long time_coming_to_its_original_form) {
Date date = new Date (time_coming_to_its_original_form);
SimpleDateFormat sdf = new SimpleDateFormat("EEE, d M yyyy h:MM a");
return sdf.format(date);
}
Вы можете использовать средство форматирования SimpleDate для разбора вашей даты как строки в эпоху
String input = "2017-09-10T18:35:00+05:00";
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
try {
Date date = sf.parse(input);
long dateInEpochFormatInMilliSeconds = date.getTime();
//if you want this in seconds then
long dateInEpochFormatInSeconds = date.getTime()/1000L;
//if you want to show only date month and year then
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
String date = sdf.format(dateInEpochFormatInMilliSeconds);
//This date String will contain the date in dd-MM-yyyy format
} catch (ParseException| ArithmeticException e) {
e.printStackTrace();
}