Как установить календарь в соответствии с часовым поясом
Я хочу сделать календарь в соответствии с часовым поясом. Я пытался решить проблему, просматривая различные запросы, но не могу. Теперь он выбирает мобильное время по умолчанию. Если у кого есть идея, пожалуйста, помогите мне. Часовой пояс должен быть британским временем.
Я старался:
{
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 ответа
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, месяц = октябрь, год = 2018
ZonedDateTime
в значительной степени заменяет устаревшие Calendar
учебный класс.
Что пошло не так в вашем коде?
Идентификатор часового пояса для британского времени Europe/London
, В вашем коде вы использовали UTC
, что является чем-то другим, и даст вам другой результат, по крайней мере, иногда. Британское время совпадает с UTC в течение года в некоторые годы, но не в это время года в этом году. Итак, у вас есть время, которое было на час раньше, чем в Великобритании.
Также c1.get(Calendar.HOUR)
дает вам час в AM или PM с 1 по 12, что я не думаю, что было то, что вы хотели.
Вопрос: Могу ли я использовать java.time
на андроид?
Да, java.time
прекрасно работает на устройствах Android. Это просто требует как минимум Java 6.
- В Java 8 и более поздних версиях, а также на новых устройствах Android (от 26 уровня API, как мне говорят) новый API поставляется встроенным.
- В Java 6 и 7 получают ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310, где впервые был описан современный API).
- На (более старой) версии Android используйте версию Android ThreeTen Backport. Это называется ThreeTenABP. Убедитесь, что вы импортируете классы даты и времени из пакета
org.threeten.bp
и подпакеты.
связи
- Учебник Oracle: Дата и время, объясняя, как использовать
java.time
, - Проект ThreeTen Backport
- ThreeTenABP, Android-версия ThreeTen Backport
- Вопрос: Как использовать ThreeTenABP в Android Project, с очень подробным объяснением.
- Запрос спецификации Java (JSR) 310.
Используйте этот метод для получения времени из часового пояса, но здесь одно условие должно проверять автоматическое время в настройках, иначе перейти на страницу настроек.
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();
}
}