formatting.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from __future__ import annotations
  2. from typing import TYPE_CHECKING
  3. from isoduration.constants import PERIOD_PREFIX, TIME_PREFIX
  4. from isoduration.formatter.checking import validate_date_duration
  5. if TYPE_CHECKING: # pragma: no cover
  6. from isoduration.types import DateDuration, TimeDuration
  7. def format_date(date_duration: DateDuration, global_sign: int) -> str:
  8. validate_date_duration(date_duration)
  9. date_duration_str = PERIOD_PREFIX
  10. if date_duration.weeks != 0:
  11. date_duration_str += f"{(date_duration.weeks * global_sign):g}W"
  12. if date_duration.years != 0:
  13. date_duration_str += f"{(date_duration.years * global_sign):g}Y"
  14. if date_duration.months != 0:
  15. date_duration_str += f"{(date_duration.months * global_sign):g}M"
  16. if date_duration.days != 0:
  17. date_duration_str += f"{(date_duration.days * global_sign):g}D"
  18. return date_duration_str
  19. def format_time(time_duration: TimeDuration, global_sign: int) -> str:
  20. time_duration_str = TIME_PREFIX
  21. if time_duration.hours != 0:
  22. time_duration_str += f"{(time_duration.hours * global_sign):g}H"
  23. if time_duration.minutes != 0:
  24. time_duration_str += f"{(time_duration.minutes * global_sign):g}M"
  25. if time_duration.seconds != 0:
  26. time_duration_str += f"{(time_duration.seconds * global_sign):g}S"
  27. if time_duration_str == TIME_PREFIX:
  28. return ""
  29. return time_duration_str