Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!Пости з тегом #Локалізація
29.01.2025
SQLite та компоненти дат
Коли збираєшся обчислювати статистику за тижнями, стаєш перед неуникним фактом, що в Америці тижні рахують з неділі, а не з понеділка. Як не крути, а доведеться підтримувати обидва варіанти. Поки що я елегантно про це “забув” та рахував як-небудь. Але прийшов час це виправити.
Все ще й ускладнилось тим, що в SQLite якось дивно розподілені команди форматування: в старих версіях є тільки %W
- номер тижня, що починається з понеділка, та %w
- номер дня, що починається з неділі. А в нових додали протилежні ним %U
та %u
. Та той SQLite, що є на iOS, ще старий.
В GRDB є можливість скомпілювати власну, нову версію SQLite. Але в цього підходу не все гладко із залежностями, тому мені довелося відмовитись.
Натомість просто додав до пінгів стовпчики weekCode
, weekday
та ще парочку. Оскільки дата не змінюється, то залишається один раз їх заповнити — та можна забути про всі ті запити із strftime
.
Що таке weekCode
? Комбінація року та номеру тижня: 202451
. Тут, до речі, дізнався ще про один нюанс — що звичайного %Y
тут недостатньо, бо тиждень 202501
почався 30 грудня 2024. Тобто потрібний “рік, до якого призначено цей тиждень”, та у Swift навіть так і називається: DateComponents.yearForWeekOfYear
.
Та, до речі, всі ці обчислення дат я тепер роблю у Swift, а там календар знає всі налаштування користувача — і перший день тижня, і часовий пояс.