Перейти к содержанию

Дата и время

В этом разделе описаны встроенные паттерны для генерации дат и времени в формате ISO.

DateTimePatterns

Форматы даты и времени по стандарту ISO.

date_iso = r"^(19|20)\d{2}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|2[0-8])$"
time_iso = r"^([01]\d|2[0-3]):[0-5]\d:[0-5]\d$"
datetime_iso = r"^(19|20)\d{2}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|2[0-8])T([01]\d|2[0-3]):[0-5]\d:[0-5]\d$"

Пример использования

from fucktar.generator import BasePattern
from fucktar.config import PatternConfig
from fucktar.default_patterns.date import DateTimePatterns

class DateTimePatterns(BasePattern[DateTimeData]):
    date_iso = DateTimePatterns.date_iso
    time_iso = DateTimePatterns.time_iso
    datetime_iso = DateTimePatterns.datetime_iso

    pattern_config = PatternConfig(
        scope="datetime",
        unique_fields=["datetime_iso"]
    )

Особенности паттернов

Дата (date_iso)

Паттерн генерирует даты в формате ISO 8601: YYYY-MM-DD.

Ограничения: - Год: 1900-2099 - Месяц: 01-12 - День: 01-28 (ограничение до 28 для упрощения, чтобы избежать високосных лет)

Примеры корректных значений: - 2023-01-15 - 1999-12-28 - 2025-06-10

Время (time_iso)

Паттерн генерирует время в формате ISO 8601: HH:MM:SS.

Ограничения: - Час: 00-23 - Минута: 00-59 - Секунда: 00-59

Примеры корректных значений: - 12:30:45 - 00:00:00 - 23:59:59

Дата и время (datetime_iso)

Паттерн генерирует дату и время в формате ISO 8601: YYYY-MM-DDTHH:MM:SS.

Сочетает в себе ограничения паттернов даты и времени.

Примеры корректных значений: - 2023-01-15T12:30:45 - 1999-12-28T00:00:00 - 2025-06-10T23:59:59

Использование в моделях данных

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

from dataclasses import dataclass
from datetime import datetime, date, time

@dataclass
class DateTimeData:
    date_str: str
    time_str: str
    datetime_str: str

    @property
    def date_obj(self) -> date:
        return date.fromisoformat(self.date_str)

    @property
    def time_obj(self) -> time:
        return time.fromisoformat(self.time_str)

    @property
    def datetime_obj(self) -> datetime:
        return datetime.fromisoformat(self.datetime_str)

Это позволяет работать с датами и временем как с объектами Python, сохраняя при этом возможность генерации через строковые паттерны.

Рекомендации

  1. Используйте эти паттерны для генерации дат в формате ISO
  2. При необходимости более точного контроля над диапазонами дат создавайте собственные паттерны
  3. Для работы с датами в коде используйте свойства для преобразования строк в объекты даты/времени