Как в Android 10 можно выбрать любую дату, которая была до 1970 года?

Системное диалоговое окно выбора даты (календарь-карусель) ограничивает возможность выбора дат до 1970 года. Даже при попытке ввода дат вручную с клавиатуры, после нажатия кнопки ввода система автоматически заменяет введённые значения на 1970 или 2015 год. Это создает трудности при указании дат рождения людей или дат событий, которые должны отображаться в Google-календаре. Как можно обойти это ограничение? Как можно работать с датами, которые предшествуют 1970 году? <br/> <br/> Пы.Сы. Я знаком с тем, что 1970 год является отправной точкой в UNIX-системах и как это связано с количеством хранимых секунд. Меня интересует, насколько эта проблема была решена на текущий момент. Неужели Android полностью не поддерживает работу с более ранними датами?
  • 29 января 2025 г. 15:44
Ответы на вопрос 2
В Android действительно существует проблема с выбором дат до 1970 года в стандартном диалоговом окне выбора даты, которое использует API, чутко ориентирующийся на представление дат в формате UNIX (начиная с 1 января 1970 года). Это может создавать затруднения при использовании даты для исторических событий или дат рождения.

Тем не менее, есть несколько способов обойти это ограничение:

1. **Использование сторонних библиотек**. Вы можете использовать сторонние библиотеки для выбора дат, такие как **MaterialDateTimePicker**, **Android Jetpack**, или другие библиотеки для работы с датами, которые обеспечивают большую гибкость и позволяют вам выбирать даты, предшествующие 1970 году.

2. **Создание собственного диалогового окна выбора даты**. Если стандартные компоненты вас не устраивают, вы можете создать собственный интерфейс для выбора даты, используя элементы управления, такие как `Picker`. Это даст вам полную свободу в выборе и отображении дат.

3. **Работа с форматами дат и временем**. Вы можете использовать альтернативные классы для работы с датами в Java (например, `java.time` в Android API 26 и выше) или сторонние библиотеки, такие как **Joda-Time**, для работы с датами. Это позволит вам сохранять и обрабатывать даты старше 1970 года более эффективно.

4. **Хранение дат в формате строки**. Если нужно только хранить даты, можно хранить их в виде строковых представлений. Например, даты можно сохранять в формате "дд.мм.гггг" и при этом не использовать стандартный выбор даты.

5. **Обращение в Google Calendar API**. Если вы загружаете или запрашиваете данные на стороне сервера (например, в Google Calendar), используйте API, позволяющий вам работать с датами в ISO 8601 формате, что обходит проблему с выбором дат на устройстве.

На текущий момент следует понимать, что Android не имеет встроенной поддержки для полной работы с датами до 1970 года в стандартных средствах. Вам придется использовать решения, описанные выше, в зависимости от ваших требований к проекту.
проверил прям щас - в контактах выставляется дата меньше 1970-го без проблем. И есть флажок "не указывать год" видимо для обратной совместимости. 
Так что проблема возможно в конкретном приложении конкретного вендора.
Похожие вопросы