]> littlesong.place Git - littlesongplace.git/commitdiff
Fix timezones for jam events
authorChris Fulljames <christianfulljames@gmail.com>
Sun, 13 Apr 2025 21:11:44 +0000 (17:11 -0400)
committerChris Fulljames <christianfulljames@gmail.com>
Sun, 13 Apr 2025 21:11:44 +0000 (17:11 -0400)
src/littlesongplace/jams.py
src/littlesongplace/songs.py
src/littlesongplace/templates/jam-event.html

index 4f27233e01a1ad1ed40a31bde984e3ec5aafcb36..26978d68f0cccff597e205e70d91f7e8bd7e7822 100644 (file)
@@ -161,8 +161,8 @@ def events_update(jamid, eventid):
     description = request.form["description"]
     startdate = request.form["startdate"]
     enddate = request.form["enddate"]
-    _validate_timestamp(startdate)
-    _validate_timestamp(enddate)
+    startdate = _validate_timestamp(startdate)
+    enddate = _validate_timestamp(enddate)
     db.query(
             """
             UPDATE jam_events
@@ -202,7 +202,13 @@ def _get_jam_by_id(jamid):
 
 def _validate_timestamp(timestamp):
     try:
-        datetime.fromisoformat(timestamp)
+        dt = datetime.fromisoformat(timestamp)
+        if dt.tzinfo:
+            # Has timezone, convert to UTC
+            return dt.astimezone(timezone.utc)
+        else:
+            # No timezone, assume it is already UTC
+            return dt.replace(tzinfo=timezone.utc)
     except ValueError:
         abort(400)
 
index fd21ff035c869aa3f218a0b497a71e32a48c3103..5e4e021d0b5a455925f3267eba5d59925f1e58c3 100644 (file)
@@ -183,12 +183,11 @@ def _from_db(query, args=()):
                     [sd["eventid"]],
                     one=True)
             if event_row and event_row["enddate"]:
-                enddate = datetime.fromisoformat(event_row["enddate"]).astimezone()
-                hidden = datetime.now().astimezone() < enddate
+                enddate = datetime.fromisoformat(event_row["enddate"])
+                hidden = datetime.now(timezone.utc) < enddate
 
         created = (
                 datetime.fromisoformat(sd["created"])
-                .astimezone()
                 .strftime("%Y-%m-%d"))
 
         songs.append(Song(
index 7b8f7e97a3b02128a18a33f9153d744f196a971f..b1b19fceb0dc85330807f39864d5357154cae461 100644 (file)
             <br/>
         {% if event.startdate %}
         <strong>Start Date:</strong>
-            {{ event.startdate.astimezone().strftime("%Y-%m-%d %I:%M%p") }}
+            {{ event.startdate.strftime("%Y-%m-%d %I:%M%p") }} (UTC)
             <br/>
         {% endif %}
         {% if event.enddate %}
         <strong>End Date:</strong>
-            {{ event.enddate.astimezone().strftime("%Y-%m-%d %I:%M%p") }}
+            {{ event.enddate.strftime("%Y-%m-%d %I:%M%p") }} (UTC)
         {% endif %}
     </div>
 
     {{ jam.description }}
     </div>
 
-    <h2>Submissions</h2>
+    <h2>Entries</h2>
     <a class="button" href="/edit-song?eventid={{ event.eventid }}">Submit a Song</a>
     <br/>
     <br/>
-    {% if songs %}<p><small>This event has received {{ songs|length }} submission{% if songs|length > 1 %}s{% endif %}</small></p>{% endif %}
+    {% if songs %}<p><small>This event has received {{ songs|length }} {% if songs|length > 1 %}entries{% else %}entry{% endif %}</small></p>{% endif %}
     {% include "song-list.html" %}
 
     <h2>Comments</h2>
         <br/>
         <label>
             Event Start (When the event title and description become public)<br/>
-            <input type="datetime-local" name="startdate" value="{{ event.startdate }}" required/>
+            <input type="datetime-local" name="startdate" value="{% if event.startdate %}{{ event.startdate.replace(tzinfo=None).isoformat() }}{% endif %}" required/> (UTC)
         </label>
         <br/>
         <label>
             Event End (When submitted songs become public)<br/>
-            <input type="datetime-local" name="enddate" value="{{ event.enddate }}" required/>
+            <input type="datetime-local" name="enddate" value="{% if event.enddate %}{{ event.enddate.replace(tzinfo=None).isoformat() }}{% endif %}" required/> (UTC)
         </label>
         <br/>
         <input type="submit" value="Save"/>