137 lines
3.4 KiB
Python
137 lines
3.4 KiB
Python
import time
|
|
import ntptime # type: ignore
|
|
|
|
_UTC_OFFSET: int = 1 * 3600 # +1 or +2 hours for CEST, adjust for your timezone
|
|
|
|
|
|
def local_time_with_offset():
|
|
# Set timezone offset (in seconds)
|
|
current_time = time.time() + _UTC_OFFSET
|
|
return time.localtime(current_time)
|
|
|
|
|
|
def get_datetime_string(format="full"):
|
|
"""
|
|
Return date/time as string with different formats
|
|
|
|
Args:
|
|
format: "full", "date", "time", "short", "ticks"
|
|
"""
|
|
try:
|
|
year, month, day, hour, minute, second, weekday, yearday = (
|
|
local_time_with_offset()
|
|
)
|
|
|
|
if format == "full":
|
|
return (
|
|
f"{year:04d}-{month:02d}-{day:02d} {hour:02d}:{minute:02d}:{second:02d}"
|
|
)
|
|
elif format == "date":
|
|
return f"{year:04d}-{month:02d}-{day:02d}"
|
|
elif format == "time":
|
|
return f"{hour:02d}:{minute:02d}:{second:02d}"
|
|
elif format == "short":
|
|
return f"{month:02d}/{day:02d} {hour:02d}:{minute:02d}"
|
|
else:
|
|
return f"Ticks: {time.ticks_ms()} ms"
|
|
|
|
except:
|
|
return f"Ticks: {time.ticks_ms()} ms"
|
|
|
|
|
|
def get_german_datetime():
|
|
"""Return German date and time"""
|
|
try:
|
|
year, month, day, hour, minute, second, weekday, yearday = (
|
|
local_time_with_offset()
|
|
)
|
|
|
|
weekdays = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]
|
|
weekday_name = weekdays[weekday]
|
|
|
|
return f"{weekday_name}.{day:02d}.{month:02d}.{year} {hour:02d}:{minute:02d}"
|
|
|
|
except:
|
|
ticks = time.ticks_ms() // 1000
|
|
return f"Zeit: {ticks} sek"
|
|
|
|
|
|
def get_german_timestamp_short():
|
|
"""Get German timestamp with short months (for Wokwi)"""
|
|
ticks = time.ticks_ms()
|
|
day = (ticks // 86400000) % 31 + 1
|
|
month = (ticks // 2592000000) % 12 + 1
|
|
hour = (ticks // 3600000) % 24
|
|
minute = (ticks // 60000) % 60
|
|
|
|
months = [
|
|
"Jan",
|
|
"Feb",
|
|
"Mär",
|
|
"Apr",
|
|
"Mai",
|
|
"Jun",
|
|
"Jul",
|
|
"Aug",
|
|
"Sep",
|
|
"Okt",
|
|
"Nov",
|
|
"Dez",
|
|
]
|
|
month_name = months[month - 1]
|
|
|
|
return f"{day}.{month_name} {hour:02d}:{minute:02d}"
|
|
|
|
|
|
def get_german_time_ticks():
|
|
"""Get German time using ticks (works in Wokwi)"""
|
|
ticks = time.ticks_ms()
|
|
|
|
# Simulate time progression
|
|
total_seconds = ticks // 1000
|
|
hours = (total_seconds // 3600) % 24
|
|
minutes = (total_seconds // 60) % 60
|
|
seconds = total_seconds % 60
|
|
|
|
return f"{hours:02d}:{minutes:02d}:{seconds:02d}"
|
|
|
|
|
|
def get_german_date_ticks():
|
|
"""Get German date using ticks"""
|
|
ticks = time.ticks_ms()
|
|
|
|
# Simulate date progression (starting from Jan 15, 2024)
|
|
days_passed = ticks // (24 * 3600 * 1000)
|
|
day = 15 + (days_passed % 28) # Simple month simulation
|
|
month = 1 + (days_passed // 28) % 12
|
|
year = 2024 + (days_passed // (28 * 12))
|
|
|
|
months = [
|
|
"JAN",
|
|
"FEB",
|
|
"MAR",
|
|
"APR",
|
|
"MAI",
|
|
"JUN",
|
|
"JUL",
|
|
"AUG",
|
|
"SEP",
|
|
"OKT",
|
|
"NOV",
|
|
"DEZ",
|
|
]
|
|
month_name = months[month - 1]
|
|
|
|
return f"{day:02d}.{month_name}.{str(year)[-2:]}"
|
|
|
|
|
|
def sync_ntp_time():
|
|
try:
|
|
print("Syncing time via NTP...")
|
|
ntptime.settime() # Default uses pool.ntp.org
|
|
print("Time synchronized successfully!")
|
|
return True
|
|
except Exception as e:
|
|
print("NTP sync failed:", e)
|
|
return False
|