feat: display admin timestamps in America/Denver time

Convert UTC timestamps from SQLite to Mountain Time (America/Denver)
using a Jinja2 template filter backed by zoneinfo; add tzdata dependency
for IANA timezone data in the slim Docker image.
This commit is contained in:
2026-03-28 22:58:37 -06:00
parent d5eac47ceb
commit 4f675fe74c
3 changed files with 18 additions and 2 deletions
+15
View File
@@ -3,6 +3,8 @@ import os
import re import re
import sqlite3 import sqlite3
import threading import threading
from datetime import datetime, timezone
from zoneinfo import ZoneInfo
from email_validator import validate_email, EmailNotValidError from email_validator import validate_email, EmailNotValidError
from flask import Flask, render_template, request, redirect, url_for, jsonify, abort from flask import Flask, render_template, request, redirect, url_for, jsonify, abort
@@ -23,6 +25,19 @@ app.secret_key = os.environ.get('SECRET_KEY', 'dev-secret-key-change-in-producti
limiter = Limiter(get_remote_address, app=app, default_limits=[]) limiter = Limiter(get_remote_address, app=app, default_limits=[])
_DISPLAY_TZ = ZoneInfo('America/Denver')
@app.template_filter('localtime')
def localtime_filter(value):
if not value:
return value
try:
dt = datetime.strptime(str(value), '%Y-%m-%d %H:%M:%S')
dt = dt.replace(tzinfo=timezone.utc)
return dt.astimezone(_DISPLAY_TZ).strftime('%Y-%m-%d %H:%M')
except ValueError:
return value
login_manager = LoginManager(app) login_manager = LoginManager(app)
login_manager.login_view = 'admin_login' login_manager.login_view = 'admin_login'
+1
View File
@@ -4,3 +4,4 @@ Flask-Limiter>=3.0
Flask-Login>=0.6 Flask-Login>=0.6
email-validator>=2.0 email-validator>=2.0
gunicorn gunicorn
tzdata
+1 -1
View File
@@ -42,7 +42,7 @@
<td>{{ g[4] }}</td> <td>{{ g[4] }}</td>
<td>{{ g[5] or '—' }}</td> <td>{{ g[5] or '—' }}</td>
<td>{{ 'Yes' if g[6] else 'No' }}</td> <td>{{ 'Yes' if g[6] else 'No' }}</td>
<td class="text-nowrap">{{ g[7] }}</td> <td class="text-nowrap">{{ g[7] | localtime }}</td>
<td> <td>
{% if current_user.role != 'viewer' %} {% if current_user.role != 'viewer' %}
<form method="POST" action="{{ url_for('admin_delete', entry_id=g[0]) }}?page={{ page }}" <form method="POST" action="{{ url_for('admin_delete', entry_id=g[0]) }}?page={{ page }}"