2025-04-27 18:17:20
максимально простое и автономное решение, где часовой пояс определяется по долготе с шагом 15° - то есть по географическим меридианам, без учёта административных границ.
---
## Определение часового пояса по долготе с шагом 15°
### Идея
- Земля вращается на 360° за 24 часа → 360° / 24 = 15° на один часовой пояс.
- Нулевой меридиан (UTC+0) проходит через Гринвич.
- Каждый часовой пояс - это зона шириной примерно 15° долготы.
- Для долготы `lon` можно вычислить часовой пояс так:
```python
timezone_offset = int((lon + 7.5) // 15)
```
где `+7.5` - смещение для округления к ближайшему поясу.
---
### Пример кода
```python
def timezone_by_longitude(lon):
"""
Определяет часовой пояс по долготе с шагом 15 градусов.
Возвращает смещение UTC в часах (целое число).
"""
offset = int((lon + 7.5) // 15)
# Ограничим смещение в диапазоне -12..+14 (максимальные UTC смещения)
if offset 14:
offset = 14
return offset
def timezone_str(offset):
"""
Форматирует смещение в строку вида UTC+3 или UTC-5
"""
if offset == 0:
return "UTC+0"
elif offset > 0:
return f"UTC+{offset}"
else:
return f"UTC{offset}"
# Пример использования
lon = 30.6173
offset = timezone_by_longitude(lon)
print(f"Долгота: {lon}, Часовой пояс: {timezone_str(offset)}")
```
---
### Пример вывода
```
Долгота: 37.6173, Часовой пояс: UTC+3
```
---
### Особенности и ограничения
- Такой метод даёт **приблизительный** часовой пояс.
- В России и некоторых других странах реальные часовые пояса могут отличаться от географических зон.
- Не учитывает переходы на летнее время и административные особенности.
- Но зато работает автономно, быстро и без больших данных.
---
### Расширение: можно добавить словарь с названиями часовых поясов по смещению
```python
timezone_names = {
-12: "UTC-12",
-11: "UTC-11",
-10: "UTC-10",
-9: "UTC-9",
-8: "UTC-8",
-7: "UTC-7",
-6: "UTC-6",
-5: "UTC-5",
-4: "UTC-4",
-3: "UTC-3",
-2: "UTC-2",
-1: "UTC-1",
0: "UTC+0",
1: "UTC+1",
2: "UTC+2",
3: "UTC+3",
4: "UTC+4",
5: "UTC+5",
6: "UTC+6",
7: "UTC+7",
8: "UTC+8",
9: "UTC+9",
10: "UTC+10",
11: "UTC+11",
12: "UTC+12",
13: "UTC+13",
14: "UTC+14",
}
print(f"Часовой пояс: {timezone_names[offset]}")
```
---
## Итог
- Для простоты и автономности - определяйте часовой пояс по долготе с шагом 15°.
- Это быстро, не требует данных и библиотек.
- Для России это не идеально, но даёт приближённый результат.
Если хотите - могу помочь подготовить готовую функцию с комментариями и тестами.
---
Answer from Perplexity: pplx.ai/share
Back to list