Дата и время изменения даты и времени оформления заказа на Android

Обновлено: 29.01.2023

Работа со временем в Android всегда была сложной задачей. Люди использовали либо сторонние библиотеки (например, Joda-Time, ThreeTenBp), либо вынуждены были работать со встроенными классами времени (такими как Calendar). Встроенные классы, хотя и доступны во всех версиях Android, имели не очень хороший API, были изменяемыми (поэтому не потокобезопасными), а обработка часового пояса была проблемой (ссылка).

В последнем выпуске подключаемого модуля Android Gradle (версия 4.0.0+) была представлена ​​"поддержка дешугаринга Java 8+ API". Говоря простым языком, мы можем использовать некоторые API-интерфейсы Java 8, и плагин будет переводить эти API-интерфейсы в Android-совместимую Java за кулисами, которые можно использовать во всех версиях Android, не требуя минимального уровня API!

В целом, Kotlin предоставляет свои замены Collections и Stream API, которые, на мой взгляд, превосходят Java. Так что из списка API Java 8 я думаю, что для Kotlin-разработчика интересен только отличный API java.time. Наконец, хороший API даты/времени, который можно использовать в Android!

Обратите внимание, что этот процесс "удаления сахара" может стоить несколько дополнительных КБ в вашем APK/AAB. Но если это не является решающим фактором для вашего случая, вам следует рассмотреть возможность использования более новых API.

Настроить

Вам потребуется изменить файлы build.gradle. Более подробная информация (и актуальные коды версий) в официальном документе.

Познакомьтесь с классами

API времени достаточно обширен, и его полное изучение выходит за рамки этой статьи. Но я хочу представить основные классы, которые, по моему мнению, вам понадобятся в большинстве случаев.

Мгновенное

Мгновение — это момент времени. Может считаться эквивалентом метки времени, если вы знакомы с этим термином.

Местное время, LocalDate, LocalDateTime

Каждый класс представляет время, дату, дату и время соответственно без часового пояса. Большинство людей, думая о дате/времени, все равно думают об этом.

ZoneOffset, ZoneId

Они используются для работы с часовыми поясами. Вам понадобится один из них, чтобы преобразовать Local* в Instant .

ZoneDateTime

Вы, наверное, догадались. Это то, что вы получаете, когда объединяете LocalDateTime с ZoneId. Его можно преобразовать в Instant .

Игра с датой и временем

Эти API предоставляют интуитивно понятные и согласованные способы управления датой и временем. Помните, что все объекты неизменяемы, поэтому каждый раз, когда происходит манипуляция, создается новый объект (что хорошо). Ниже приведены некоторые полезные примеры.

Несколько способов инициализации объектов времени. Получить дату и время начала дня, определенные LocalDate Получить, какая дата и время сейчас в Лос-Анджелесе. Получите момент времени в различных формах. Получите в тот же день, на 1 неделю раньше. Существуют доступные методы для каждой единицы времени.

Форматирование

Обратите внимание, что средства форматирования, к которым вы привыкли в Android, например SimpleDateFormat , нельзя использовать с Java Time API. API поставляется со своими форматтерами, такими как DateTimeFormatter .

Для нового проекта Android я решил использовать Github Actions в качестве среды непрерывной интеграции — мы используем Github во всей организации, и некоторые серверные проекты уже запущены в рабочих процессах Github, поэтому создание нового проекта — хорошая идея.

Я подготовил конфигурацию, используя следующий учебник:

Недавно я потратил некоторое время на перенос нескольких своих проектов в Github Actions. Должен признаться, я был поражен простотой настройки, а также приростом производительности, который я получил благодаря…


Разработчик Android Никола Корти


Немного изменил, добавил несколько шагов:

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

Я хотел провести модульное тестирование некоторого компонента, отвечающего за отображение нескольких полей даты и времени. Я использовал форматирование Joda-Time для достижения желаемого поведения:

Приложение предназначено для польского рынка, поэтому я хотел протестировать против польских строковых литералов в тестах:

Я знал, что мне нужно каким-то образом установить правильное смещение часового пояса и языковой стандарт по умолчанию, поэтому я добавил следующее в тестовую конфигурацию:


Ну, прошло. Проверено на ложные срабатывания, установив другое смещение в DateTimeZone и установив языковой стандарт en-US - я готов. Не беспокойтесь, теперь я готов заняться другими делами.

Добавление еще нескольких коммитов и отправка в удаленный репозиторий git. Тест не проходит. Но почему? Я уже проверил смещения часовых поясов и локаль. Давайте посмотрим на тестовый отчет по CI:

Опять, что, черт возьми, происходит?

Я дважды проверил на своем локальном компьютере, что тесты проходят, запустив его через Android Studio и вызвав gradle test из командной строки. Это проходит. Хорошо. У меня сейчас проблемы.

Процесс отладки

Я начал обсуждать этот вопрос с коллегами. Имеет ли значение, что у меня OSX? Является ли locale pl-PL универсальным обозначением для польского языка?

Давайте укажем основные различия между моей локальной установкой и удаленной машиной:

  • на Github Action определена последняя версия ubuntu
  • моя локальная среда — OSX
  • локально у меня JDK8
  • и на удаленке? Кто знает? Давайте проверим.

Я добавил простой шаг в свой рабочий процесс:

И наблюдал, что напечатает этот шаг.


Хорошо. Это должен быть мой ответ. Локально у меня java 8, на удаленной машине java 11.

Решение

Должен ли я обновиться локально до JDK 11 или понизить версию Java в CI? Я не слишком уверен в создании проекта Android с помощью 11, поэтому решил понизить CI для использования Java 8.

Я добавил следующий шаг в свой Github Action:

Отправил код, проверил весь пайплайн. И это проходит. Какое облегчение.


Ключевые выводы

Проблема каким-то образом решена, но:

  • Какое форматирование допустимо? "wt." или "wt" (сокращение от Wtorek – вторник)? Во-первых, как его разработал дизайнер, во-вторых, как мы пишем ярлыки на польском языке, и в-третьих, как с этим справятся другие платформы (веб и iOS).

Это изменение (Wt -> wt.) на самом деле является хорошим изменением, поскольку теперь оно соответствует правилам польского языка.

  • Стоит ли использовать Joda-Time, когда есть улучшенный пакет времени в Java8 и библиотека kotlinx-datetime? Может пора отказаться от привычной библиотеки и ввести современную замену?
  • Разумно ли устанавливать Locale.setDefault и DateTimeZone.setDefault в модульном тесте? Или, может быть, мне следует ввести дополнительный уровень абстракции и предоставить тестовые двойники?

Что изменилось в Java?

Вот и получается, что core-libs в Java 9 изменились. Теперь по умолчанию используется стандарт CLDR. Это изменило способ отображения дня недели на польском языке.


Тестирование
Службы, зависящие от региональных настроек, такие как форматирование даты, времени и чисел, могут вести себя по-разному для региональных настроек, не поддерживаемых в JDK 8. Существующие тесты и приложения необходимо будет изменить.
< /p>

В основном многие люди сталкивались с подобными проблемами при обновлении версии Java. В мире Android я пока счастлив, используя старую добрую Java 8.

Что может измениться в Android?

Хотя я решил проблему с помощью модульных тестов, это не означает, что я полностью уверен в том, как это форматирование будет вести себя на устройстве с разными версиями Android API.

Такого рода проверка хорошо подходит для инструментального тестирования. Но это тема для другой статьи, которую я, возможно, напишу в будущем.

Как я не столкнулся с этой проблемой раньше?

Java 9 с этим изменением существует с 2017 года. Мне никогда не приходилось использовать Java выше 8 для создания приложений для Android. А серверные приложения? Что ж, на бэкэнде я всегда сохранял дату и время в кодировке ISO8601, а внешний клиент сам решал, как это должно отображаться.

[Обновлено] Обновление Android 13 трекер: здесь

Каждый год Google дарит нам обновленную версию своей популярной ОС для смартфонов – Android. После того, как Android 12 станет общедоступной где-то в сентябре, должны начать появляться новости и слухи о том, чего ожидать от Android 13.

Тем не менее, даже несмотря на то, что Android 12 все еще находится в стадии бета-тестирования, у нас уже есть некоторые сведения о том, чего ожидать, когда появится его преемник.

Конечно, мы оба знаем, что первая сборка Android 13 не появится до первого квартала 2022 года, так что времени на размышления предостаточно. Но не все в этой статье является предположением.

300px-Tiramisu_-_Raffaele_Diomede

Кусочек тирамису (Источник)

Например, известно, что Google Pixel 4 и Pixel 4 XL, а также более новые Pixel 5 и Pixel 4a 5G имеют право на это обновление благодаря более длительному периоду поддержки программного обеспечения Google.

Мы также уже давно знаем, что LG планирует установить обновление Android 13 на несколько своих устройств, по крайней мере на те, на которых оно было установлено в последние дни его существования.

Владельцы серии Vivo X60 также могут быть уверены, что Android 13 скоро появится. Конечно, в очереди на это обновление находится множество устройств Samsung, но это уже другая история.

В этой статье мы больше сосредоточимся на том, что Google хочет внедрить прямо в стандартную версию Android 13. Мы уже рассказали о потенциальных планах предоставления обновлений API нейронных сетей (NNAPI) через сервисы Google Play с Android 13.

google-qualcomm- рекомендуемые

Кроме того, разработчики XDA недавно рассказали кое-что еще более интересное. Конечно, Google перестал использовать десерты для публичной идентификации различных версий ОС с Android 9 Pie. Но эта практика живет внутри компании.

Например, текущая версия Android 12 «S» известна внутри компании как Snow Cone. Судя по всему, Android 13 «T» носит кодовое название «Тирамису» и представляет собой кофейный десерт, родом из дома чемпионов УЕФА ЕВРО-2020.

При дальнейшем раскопках те же ребята из XDA также установили, что с Android 13 подходящие устройства Google Pixel могут разрешать вторичным профилям совершать платежи NFC.

Multi-user-NFC-payments-on-Android-13-update

(Источник)

Несмотря на то, что многопользовательская поддержка существует уже довольно давно, отсутствует возможность настройки платежей NFC для дополнительных профилей. Согласно отчету, это изменится с обновлением Android 13.

Но, как уже отмечалось, до официального выпуска Android T еще много времени, так что да, к моменту выхода стабильной версии многое может измениться.

С другой стороны, мы будем внимательно следить за всеми связанными с этим событиями и соответствующим образом обновлять эту статью всякий раз, когда мы сталкиваемся с новыми и интересными вещами. Оставайтесь с нами.

Обновление 1 (26 августа)

IST, 12:14: новые отчеты показывают, что Google планирует расширить поддержку UWB на Pixel 6 в Android 13 (Android T). Об этом говорится в недавнем комментарии Google к AOSP.

pixel 6 uwb android t comment

Щелкните/коснитесь, чтобы увеличить масштаб (исходник)

Обновление 2 (25 сентября)

Обновление 3 (14 декабря)

IST, 15:18: Google, как сообщается, представила исправление для AOSP, которое добавляет возможность отключения мониторинга фантомных процессов.

Это означает, что Google может позволить пользователям включать и выключать Phantom Process Killer в Android 13. Подробнее об этом здесь.

Обновление 4 (23 декабря)

IST, 13:09: новые отчеты предполагают, что Android 13 может стать первым выпуском, в котором будет добавлена ​​полная поддержка Bluetooth LE Audio.

Обновление 5 (24 декабря)

IST 09:02: XDA предлагает нам эксклюзивный первый взгляд на Android 13, который, по-видимому, носит кодовое название «Тирамису».

Некоторые из ожидаемых функций Android 13 включают:

Обновление 6 (29 декабря)

11:23 по восточному стандартному времени: до Android 13 еще далеко, но разработка идет довольно активно, и теперь, по словам руководителя команды Google Nearby, Android 13 будет отделять сканирование Wi-Fi от местоположения.

Обновление 7 (11 января)

IST, 12:02: последние разработки в грядущей версии Android 13 предполагают, что Google работает над функцией под названием «Нажмите для передачи».

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

Сообщается, что Google также работает над добавлением ярлыка QR-сканера на экран блокировки. В настройках быстрого доступа будет переключатель QR-кода. Для получения дополнительной информации перейдите сюда.

Наконец, в отчетах также утверждается, что Google придаст новый вид средству выбора вывода в обновлении Android 13. Для тех, кто не знает, средство выбора вывода имеет элементы управления звуком и представлено в виде кнопки в правом верхнем углу.

Обновление 8 (12 января)

16:14 (IST): говорят, что в Android 13 есть переключатель пользователя с защитой клавиатуры, который позволит вам легко переключиться на другой профиль пользователя, прежде чем разблокировать его. Подробнее об этом здесь.

Обновление 8 (13 января)

12:30 (IST): Google, похоже, обновляет систему динамических тем Android 12. Согласно последней информации (от Android Police), компания готовит четыре новые цветовые комбинации для динамических тем с обновлением Android 13.

Кроме того, как уже известно, в Android 13 добавлена ​​настройка для разрешения уведомлений. И теперь мы также знаем, как это будет выглядеть после утечки пользовательского интерфейса функции разрешения уведомлений.

 уведомление-разрешение-UI-Android-13

(Нажмите/щелкните, чтобы увеличить)

Обновление 9 (15 января)

17:05 (IST): Мишаал Рахман, пытаясь разобраться в разговоре инженеров Google, отметил, что Google не может удалять исходный код Android 13 вместе с бета-версиями.

«У меня [складывается] впечатление, что как только Android T станет общедоступной бета-версией, внутренние gerrit-изменения будут опубликованы [в] AOSP».

Это предложение привлекло мое внимание, но к сожалению, сотрудник Google внес исправление, поэтому мы не получим исходный код с бета-версиями Android 13 (Источник)

Однако, по словам инженера Google, код, скорее всего, будет выпущен уже в августе. Это как минимум на пару месяцев раньше, чем в предыдущих выпусках.

Обновление 10 (28 января)

10:48 (IST): Устройства с Android 13 могут быстрее загружать игры. Говорят, что Google добавит новый API, который повысит скорость процессора при обнаружении запуска игры. Следовательно, игры в Android 13 будут загружаться быстрее.

Обновление 11 (11 февраля)

10:29 (IST): Google выпустила первую предварительную версию для разработчиков своей новой ОС Android 13 для соответствующих телефонов Pixel. Версия 1 ориентирована на отзывы разработчиков и содержит новые функции, API и изменения в поведении.

Кроме того, Google также раскрыла временную шкалу Android 13, которая включает в себя 2 предварительные версии для разработчиков и 4 бета-версии, пока ОС не достигнет стабильной работы. Все эти обновления DP и бета-версии будут выпущены в период с февраля по июль.

Android-13- временная шкала

Нажмите/нажмите, чтобы увеличить

10:45 (IST): вот функции, которые Android 13 Developer Preview включает в себя для пользователей Pixel.

– Плитки быстрых настроек для режима работы одной рукой и цветокоррекции.

– Плитка быстрых настроек для сканера QR-кода.

– Панель задач на устройствах с большим экраном может отображать до 6 значков по сравнению с 5 на Android 12L.

– Изменен дизайн средства выбора вывода мультимедиа.

– Добавлен новый диспетчер служб переднего плана с плиткой быстрых настроек, и при нажатии на нее отображается запущенное в данный момент приложение. .

– При создании гостевого профиля вы можете выбрать, какое приложение будет установлено в этот профиль.

– Экономия ресурсов Android (TARE) добавлена ​​в параметры разработчика.

– Android 13 предоставляет разрешение во время выполнения для уведомлений.

– В настройки трехкнопочной навигации добавлен переключатель, который позволяет отключить функцию «удерживайте кнопку «Домой», чтобы вызвать помощника».

< p>– Панель управления конфиденциальностью показывает, какие приложения получали доступ к разрешениям во время выполнения за последние 7 дней, а не 24 часа.

– Беззвучный режим также отключает тактильные ощущения.

– Разделение экрана. добавлена ​​кнопка в режиме PiP.

– Для каждого приложения Функция настройки языка добавлена, но по умолчанию она отключена.

Для получения более подробной информации о функциях предварительной версии Android 13 для разработчиков вы можете просмотреть полную ветку здесь.

Обновление 12 (12 февраля)

11:23 (IST): Google представляет функцию автоматической очистки буфера обмена, которая автоматически удаляет основной клип из глобального буфера обмена через заданное время.

Кроме того, Google также добавила в Android 13 "режим концентратора", который позволяет обмениваться приложениями на других устройствах, таких как планшеты. В настоящее время функция находится в разработке. Подробнее об этом здесь.

Обновление 13 (14 февраля)

10:49 (IST): похоже, Google улучшила тему Material You в Android 13. В Android 12 beta 3 компания добавила динамическую систему тем к значкам на главном экране для своего собственного приложения.

Теперь, сделав еще один шаг в Android 13, Google также позволяет сторонним приложениям использовать тему Material You. Подробнее об этом здесь.

Обновление 14 (15 февраля)

12:00 (IST): с Android 13 пользователи смогут запускать виртуальные машины с Windows и Linux на своих смартфонах с большей производительностью. Подробнее об этом здесь.

Обновление 15 (16 февраля)

23:35 (IST): в Android 13 Google, похоже, делает функцию Fast Pair доступной для других OEM-производителей, включая устройства, которые поставляются без GMS.

Fast Pair автоматически обнаруживает ближайшие аксессуары Bluetooth и предлагает пользователям быстро выполнить сопряжение и настройку устройства.

Обновление 16 (17 февраля)

13:43 (IST). По сообщениям, для новых устройств с Android 13 потребуется специальное оборудование для поддержки мобильных водительских прав (mDL) и цифровых удостоверений личности.

Кроме того, оборудование должно поддерживать уровень аппаратной абстракции идентификационных данных (HAL) версии 202201 или более поздней. Подробнее об этом здесь.

Обновление 17 (24 февраля)

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

Обновление 18 (1 марта)

11:46 (IST): возможно, Google планирует отображать более удобное название версии Android в настройках. В настоящее время версия для Android отображается как «Тирамису», как показано на снимке экрана ниже.

Обновление 19 (2 марта)

22:01 (IST): в Android 13 Google может позволить пользователям регулировать уровень яркости фонарика. На данный момент пользователи Android могут только включать и выключать светодиодную вспышку.

Что бы это ни стоило, эта функция уже много лет доступна на устройствах iPhone и Samsung.

Обновление 20 (5 марта)

15:45 (IST): Android 13 может включать в себя функцию для планшетов под названием Hub Mode. Это позволит пользователям обмениваться приложениями между профилями, не требуя данных для входа или переключения между профилями. Подробнее об этом здесь.

PiunikaWeb начинался как веб-сайт исключительно журналистских расследований, основное внимание в котором уделялось «срочным» или «эксклюзивным» новостям. Вскоре наши истории были подхвачены такими изданиями, как Forbes, Foxnews, Gizmodo, TechCrunch, Engadget, The Verge, Macrumors и многими другими. Хотите узнать больше о нас? Идите сюда.

Читайте также: