Как преобразовать часовой пояс GMT в соответствии с местоположением устройства?

Я хочу преобразовать часовой пояс из GMT в местный часовой пояс в зависимости от местоположения устройства. Я пробовал разные методы, но не получил желаемого результата. Я знаю, что в сети есть много решений, но я застрял здесь. Итак, как я могу это расставить? У меня есть формат часового пояса по Гринвичу, например: 2019-04-10T08:20:25Z

Это код, который я пробовал до сих пор:

 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy:MM:dd'T'HH:mm:ss'Z'");
    simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    try {
        Date myDate = simpleDateFormat.parse(onlyDate);
        android.util.Log.v("Df", String.valueOf(myDate));
    } catch (ParseException e) {
        e.printStackTrace();
    }

Здесь onlyDate - часовой пояс GMT

В качестве отступления подумайте о том, чтобы отказаться от давно устаревших и заведомо неприятных SimpleDateFormat и друзей и добавить тридесятьABP в свой проект Android, чтобы использовать java.time, современный API даты и времени Java. С ним намного приятнее работать.

Ole V.V. 10.04.2019 16:20
1
1
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Использовать локаль:

  override fun formatDate(date: Date?, dateFormat: String, locale: Locale?): String {
    if (date != null) {
        val localeToUse: Locale
        if (locale != null) {
            localeToUse = Locale.getDefault()
        } else {
            localeToUse = Locale.UK
        }
        try {
            val targetFormat = SimpleDateFormat(dateFormat, localeToUse)
            return targetFormat.format(date).toString()
        } catch (ignore: Exception) {
            // Empty
        }
    }

    return ""
}

Джава

   String formatDate(Date date, String dateFormat, Locale locale){
    if (date != null) {
        Locale localeToUse;
        if (locale != null) {
            localeToUse = Locale.getDefault();
        } else {
            localeToUse = Locale.UK;
        }
        try {
            SimpleDateFormat targetFormat = new SimpleDateFormat(dateFormat, localeToUse);
            return targetFormat.format(date);
        } catch (Exception ignore) {
            // Empty
        }
    }

    return "";
}

как это сделать в джаве?

Vipan Verma 10.04.2019 14:03
Ответ принят как подходящий

это сработало для меня:

 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
            formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
            Date value = null;
            try {
                value = formatter.parse(onlyDate);
                SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MMM-yyyy h:mm:ss a");
                dateFormatter.setTimeZone(TimeZone.getDefault());
               ourDate = dateFormatter.format(value);
                android.util.Log.v("lh", ourDate);

            } catch (ParseException e) {
                e.printStackTrace();
            }

Другие вопросы по теме