Включите китайский календарь в свое приложение

Инструменты, которые нам понадобятся

  • IPad с установленным Swift Playgrounds, или
  • Компьютер Mac с установленным Xcode.

Что нам нужно знать

  • Основы программирования на Swift.

Фон

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

Еще один интересный аспект китайского календаря - это связь разных животных с каждым годом, известная как «китайские зодиаки».

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

Существует двенадцать зодиаков, расположенных в определенном порядке: крыса, бык, тигр, кролик / заяц, дракон, змея, лошадь, коза / овца / баран, обезьяна, петух, собака и свинья / кабан.

Вы когда-нибудь были в китайском ресторане, где под салфеткой, на которой держится посуда, вы могли найти лист бумаги, который говорит вам, какой китайский зодиак принадлежит вам, в зависимости от того, в каком году вы родились?

Например, можно сказать, что если вы родились в 1967, 1979, 1991, 2003 или 2015 годах, вы родились в год козла. Но знаете ли вы, что если вы родились до китайского Нового года того же года, ваш зодиак находится перед козлом, то есть с лошадью?

Это потому, что китайский календарь немного не синхронизирован с календарем, который мы используем. Не 1 январяˢᵗ знаменует начало нового года, а скорее китайский Новый год, следовательно, новый знак зодиака.

Китайский Новый год часто начинается позже 1ˢᵗ января того же года, но как мы узнаем, когда китайский Новый год наступает каждый год?

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

Он состоит из двух китайских иероглифов, которые меняются каждый год в день китайского Нового года, и это второй китайский иероглиф, который определяет, какое животное связано с этим годом.

Начать кодирование

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

Создайте новую игровую площадку в Xcode на Mac или, если у вас есть iPad, используйте Swift Playgrounds.

Для работы с датами и календарями я использую встроенные Calendar и DateComponents.

Давайте попробуем преобразовать дату «1 мая 2020 года» в дату по китайскому календарю. При беглом взгляде на prokerala.com выясняется, что датой является 4ᵗʰ месяца 9ᵗʰ дня 4718 года. Давайте узнаем, как это сделать с помощью Swift.

Для начала нам понадобится экземпляр DateComponents для хранения нашей обычной календарной даты. «Май» - это 5ᵗʰ месяц. Убедитесь, что вверху у вас есть import Foundation или import UIKit.

Затем нам нужно создать экземпляр Calendar, указать идентификатор как «григорианский» и создать экземпляр даты из DateComponents из предыдущего шага.

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

Затем нам нужно иметь возможность отображать нашу дату в разных форматах как String, используя DateFormatter.

Запустите Playground, и мы увидим, что наша дата правильно напечатана в консоли. Ничего фантастического. Теперь измените календарь DateFormatter на китайский, и давайте сделаем так, чтобы дата отображалась полностью.

Снова запускаем Playground и получаем что-то вроде Friday, Fourth Month 9, 2020(geng-zi) . Отлично! Мы просто перевели обычную дату на дату по китайскому календарю.

Но это только начало. Обратите внимание, что за напечатанной датой следует «(geng-zi)». Это тот ганжи, о котором мы говорили, и именно отсюда мы будем извлекать информацию о зодиаке.

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

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

Как ни странно, эти китайские иероглифы - это имена, данные 12 «земным ветвям» в качестве системы упорядочения, но не сами животные.

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

Затем мы извлекаем ветвь из строковой даты. Здесь мы используем guard на случай, если chineseDate отформатирован неправильно.

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

Чтобы проверить наши функции, мы вызываем normalDate(fromYear:month:day:) для создания Date экземпляра и передаем его в zodiacFrom(date:).

Ради интереса, давайте возьмем пример из 1991 года, который, как мы узнали из ресторанов, является годом козы.

Судя по быстрому поиску на travelchinaguide.com, китайский Новый год случился 15 февраля 1991 года. Мы в безопасности, если выберем дату позже, например, 22 июня 1991 года. .

Запустите Playground, и мы действительно получим слово «коза» строчными буквами. Ради удовольствия, давайте проверим свидание перед китайским Новым годом, но еще в 1991 году.

Снова запустим площадку, и у нас есть «лошадь».

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

Отсюда

Посмотрите приложение, которое я сделал, оно конвертирует дни рождения людей в знаки зодиака, хранит их и сопоставляет на основе совместимости!



Мои китайские зодиаки
« Мои китайские зодиаки
- это все, что вам нужно, чтобы узнать свои китайские знаки зодиака, а также знаки китайского зодиака ваших друзей и их… приложения .apple.com »