Строковая дата в эпоху

Я немного запутался в датах. В настоящее время я работаю над погодным приложением, и все работает отлично. Я просто хочу перевести этот тип формата в свой желаемый формат.

2017-09-10T18:35:00+05:00

Я просто хочу преобразовать эту дату в Великую Эпоху, а затем устанавливаю дату в моем формате желаний:

для J-SON

или я хочу преобразовать эту дату в меньшую цифру, например, Солнце, 9 сентября, 9:23 и т. д.

http://dataservice.accuweather.com/currentconditions/v1/257072?apikey=JTgPZ8wN9VUy07GaOODeZfZ3sAM12irH&language=en-us&details=true

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();
        }
Другие вопросы по тегам