Как установить календарь в соответствии с часовым поясом - PullRequest
0 голосов
/ 04 октября 2018

Я хочу сделать календарь в соответствии с часовым поясом.Я пытался решить проблему, просматривая различные запросы, но не могу.Теперь он выбирает мобильное время по умолчанию.Если у кого есть идея, пожалуйста, помогите мне.Часовой пояс должен быть британским.

Я пытался:

{
    Calendar c1;
    c1 = Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.UK);
    int hour = c1.get(Calendar.HOUR);
    int minutes = c1.get(Calendar.MINUTE);
    int seconds = c1.get(Calendar.SECOND);
    int day = c1.get(Calendar.DAY_OF_MONTH);
    int month = c1.get(Calendar.MONTH);
    int year = c1.get(Calendar.YEAR);
} 

Но он также возвращает Системную дату.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Используйте этот метод для получения времени из часового пояса, но здесь необходимо проверить одно автоматическое время в настройках, иначе перейти на страницу настроек.

 private void setDateTime() {
//        Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME, 1);
        try {
            int value = Settings.Global.getInt(getContentResolver(), Settings.Global.AUTO_TIME);
            if (value == 1) {
                Log.i("value", String.valueOf(value));
                {
                    TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
                    String pattern = "yyyy-MM-dd HH:mm:ss";
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, new Locale("en", "in"));
                    String date = simpleDateFormat.format(new Date());
                    Log.i("get C_d_t", date);
                    txt_time.setText(date);
                }
            } else {
                //move to settings
                Toast.makeText(getBaseContext(), "Must need to checked automatic date & time", Toast.LENGTH_SHORT).show();
                startActivityForResult(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS), 0);


            }
        } catch (Settings.SettingNotFoundException e) {
            e.printStackTrace();
        }


    }
0 голосов
/ 05 октября 2018

java.time

    ZonedDateTime nowInUk = ZonedDateTime.now(ZoneId.of("Europe/London"));
    int hour = nowInUk.getHour();
    int minutes = nowInUk.getMinute();
    int seconds = nowInUk.getSecond();
    int day = nowInUk.getDayOfMonth();
    Month month = nowInUk.getMonth();
    int year = nowInUk.getYear();

    System.out.println("hour = " + hour + ", minutes = " + minutes + ", seconds = " + seconds 
            + ", day = " + day + ", month = " + month + ", year = " + year);

Когда я только что запустил этот фрагмент, он напечатал:

час = 3, минуты = 41, секунды = 15, день = 5, month = OCTOBER, year = 2018

ZonedDateTime в значительной степени заменяет устаревший Calendar класс.

Что пошло не так в вашем коде?

Часовой поясИдентификационный номер для Великобритании: Europe/London.В вашем коде вы использовали UTC, что является чем-то другим и даст вам другой результат, по крайней мере иногда.Британское время совпадает с UTC в течение года в некоторые годы, но не в это время года в этом году.Таким образом, у вас есть время, которое было на час раньше, чем британское время.

Кроме того, c1.get(Calendar.HOUR) дает вам час в AM или PM с 1 до 12, что, я думаю, не было тем, что вы хотели.

Вопрос: Можно ли использовать java.time на Android?

Да, java.time прекрасно работает на устройствах Android.Для этого требуется как минимум Java 6 .

  • В Java 8 и более поздних версиях и на новых устройствах Android (от уровня API 26, как мне сказали), новый API поставляется встроенным.
  • В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310, где впервые был описан современный API).
  • На (более старом) Android, используйте Android-версию ThreeTen Backport.Это называется ThreeTenABP.Убедитесь, что вы импортируете классы даты и времени из пакета org.threeten.bp и подпакетов.

Ссылки

...