mirror of
https://github.com/bringout/oca-ocb-report.git
synced 2026-04-20 23:22:00 +02:00
19.0 vanilla
This commit is contained in:
parent
62d197ac8b
commit
184bb0e321
667 changed files with 691406 additions and 239886 deletions
|
|
@ -0,0 +1,78 @@
|
|||
import re
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
import pytz
|
||||
|
||||
strftime_to_spreadsheet_time_format_table = {
|
||||
"%H": "hh",
|
||||
"%I": "hh",
|
||||
"%M": "mm",
|
||||
"%S": "ss",
|
||||
}
|
||||
|
||||
strftime_to_spreadsheet_dateformat_table = {
|
||||
"%Y": "yyyy",
|
||||
"%y": "yy",
|
||||
"%m": "mm",
|
||||
"%b": "mmm",
|
||||
"%B": "mmmm",
|
||||
"%d": "dd",
|
||||
"%a": "ddd",
|
||||
"%A": "dddd",
|
||||
}
|
||||
|
||||
|
||||
def strftime_format_to_spreadsheet_time_format(strf_format):
|
||||
"""Convert a strftime format to a spreadsheet time format.
|
||||
"""
|
||||
|
||||
twelve_hour_system = False
|
||||
parts = []
|
||||
for part in re.finditer(r"(%.)", strf_format):
|
||||
symbol = part.group(1)
|
||||
spreadsheet_symbol = strftime_to_spreadsheet_time_format_table.get(symbol)
|
||||
if spreadsheet_symbol:
|
||||
parts.append(spreadsheet_symbol)
|
||||
if symbol == "%I" or symbol == "%p":
|
||||
twelve_hour_system = True
|
||||
|
||||
separator = re.search(r"(:| )", strf_format)
|
||||
separator = separator.group(1) if separator else ":"
|
||||
|
||||
return separator.join(parts) + (" a" if twelve_hour_system else "")
|
||||
|
||||
|
||||
def strftime_format_to_spreadsheet_date_format(strf_format):
|
||||
"""Convert a strftime format to a spreadsheet date format.
|
||||
"""
|
||||
parts = []
|
||||
for part in re.finditer(r"(%.)", strf_format):
|
||||
symbol = part.group(1)
|
||||
spreadsheet_symbol = strftime_to_spreadsheet_dateformat_table.get(symbol)
|
||||
if spreadsheet_symbol:
|
||||
parts.append(spreadsheet_symbol)
|
||||
|
||||
separator = re.search(r"(/|-| )", strf_format)
|
||||
separator = separator.group(1) if separator else "/"
|
||||
|
||||
return separator.join(parts)
|
||||
|
||||
|
||||
INITIAL_1900_DAY = datetime(1899, 12, 30)
|
||||
SECONDS_PER_DAY = 24 * 60 * 60
|
||||
|
||||
|
||||
def datetime_to_spreadsheet_date_number(dt, tz_name):
|
||||
context_tz = pytz.timezone(tz_name)
|
||||
localized_datetime = dt.astimezone(context_tz)
|
||||
offset = localized_datetime.utcoffset() / timedelta(seconds=1)
|
||||
timestamp = dt.timestamp() + offset
|
||||
|
||||
delta = timestamp - INITIAL_1900_DAY.timestamp()
|
||||
return delta / SECONDS_PER_DAY
|
||||
|
||||
|
||||
def date_to_spreadsheet_date_number(d):
|
||||
dt = datetime.combine(d, datetime.min.time())
|
||||
delta = dt.timestamp() - INITIAL_1900_DAY.timestamp()
|
||||
return delta / SECONDS_PER_DAY
|
||||
Loading…
Add table
Add a link
Reference in a new issue