pasquale991 commited on
Commit
e6d8cdd
·
verified ·
1 Parent(s): e0fa83b

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +13 -10
src/streamlit_app.py CHANGED
@@ -2,9 +2,10 @@ import streamlit as st
2
  import pandas as pd
3
  import json
4
  from datetime import datetime
 
 
5
  import io
6
  import os
7
- from zoneinfo import ZoneInfo # Importa ZoneInfo da zoneinfo
8
 
9
  # --- Inizializzazione Session State ---
10
  if 'file_uploader_key' not in st.session_state:
@@ -41,7 +42,9 @@ st.markdown(
41
  )
42
 
43
  # Definizione del fuso orario per l'Italia (Europe/Rome gestisce automaticamente DST)
44
- ITALY_TIMEZONE = ZoneInfo("Europe/Rome")
 
 
45
 
46
  # Funzione di conversione
47
  def convert_json_to_excel_data(json_file_content: str):
@@ -61,13 +64,12 @@ def convert_json_to_excel_data(json_file_content: str):
61
  order_date_formatted = None
62
  if order_date_str:
63
  try:
64
- # 1. Parsa la stringa ISO, che gestisce già 'Z' (UTC)
65
- dt_object_utc = datetime.fromisoformat(order_date_str)
 
66
 
67
- # 2. Assicurati che l'oggetto datetime sia consapevole del fuso orario UTC
68
- if dt_object_utc.tzinfo is None:
69
- # Se non ha informazioni sul fuso orario, assumi UTC (per casi senza 'Z')
70
- dt_object_utc = dt_object_utc.replace(tzinfo=ZoneInfo("UTC"))
71
 
72
  # 3. Converti al fuso orario italiano
73
  dt_object_italy = dt_object_utc.astimezone(ITALY_TIMEZONE)
@@ -77,6 +79,9 @@ def convert_json_to_excel_data(json_file_content: str):
77
  except ValueError:
78
  order_date_formatted = order_date_str
79
  st.warning(f"Attenzione: Impossibile parsare la data '{order_date_str}' per un file. Verrà usata la stringa originale.")
 
 
 
80
 
81
  details = order_info.get('details', [])
82
 
@@ -87,10 +92,8 @@ def convert_json_to_excel_data(json_file_content: str):
87
  if cancel_pos_oda_val is None or \
88
  (isinstance(cancel_pos_oda_val, bool) and not cancel_pos_oda_val) or \
89
  (isinstance(cancel_pos_oda_val, str) and cancel_pos_oda_val.lower() == 'false'):
90
- # Se è None, False (booleano), o "false" (stringa)
91
  positions_status_value = 'CREATED'
92
  else:
93
- # Altrimenti (True, "true", o qualsiasi altro valore non falso)
94
  positions_status_value = 'CANCELLED'
95
 
96
  row = {
 
2
  import pandas as pd
3
  import json
4
  from datetime import datetime
5
+ # Rimuovi: from zoneinfo import ZoneInfo
6
+ import pytz # Importa pytz
7
  import io
8
  import os
 
9
 
10
  # --- Inizializzazione Session State ---
11
  if 'file_uploader_key' not in st.session_state:
 
42
  )
43
 
44
  # Definizione del fuso orario per l'Italia (Europe/Rome gestisce automaticamente DST)
45
+ # Utilizzo pytz
46
+ ITALY_TIMEZONE = pytz.timezone("Europe/Rome")
47
+ UTC_TIMEZONE = pytz.utc # Definiamo anche UTC per chiarezza
48
 
49
  # Funzione di conversione
50
  def convert_json_to_excel_data(json_file_content: str):
 
64
  order_date_formatted = None
65
  if order_date_str:
66
  try:
67
+ # 1. Parsa la stringa ISO. fromisoformat è smart ma non sempre rende l'oggetto timezone-aware
68
+ # In questo caso, il '.000Z' finale indica UTC, quindi lo marchiamo come tale.
69
+ dt_object_naive = datetime.fromisoformat(order_date_str.replace('Z', '')) # Rimuovi 'Z' per parsing fromisoformat base
70
 
71
+ # 2. Rendi l'oggetto datetime consapevole del fuso orario UTC
72
+ dt_object_utc = UTC_TIMEZONE.localize(dt_object_naive)
 
 
73
 
74
  # 3. Converti al fuso orario italiano
75
  dt_object_italy = dt_object_utc.astimezone(ITALY_TIMEZONE)
 
79
  except ValueError:
80
  order_date_formatted = order_date_str
81
  st.warning(f"Attenzione: Impossibile parsare la data '{order_date_str}' per un file. Verrà usata la stringa originale.")
82
+ except Exception as tz_error: # Cattura anche errori di fuso orario
83
+ st.warning(f"Attenzione: Errore nella conversione del fuso orario per '{order_date_str}': {tz_error}. Verrà usata la stringa originale.")
84
+ order_date_formatted = order_date_str
85
 
86
  details = order_info.get('details', [])
87
 
 
92
  if cancel_pos_oda_val is None or \
93
  (isinstance(cancel_pos_oda_val, bool) and not cancel_pos_oda_val) or \
94
  (isinstance(cancel_pos_oda_val, str) and cancel_pos_oda_val.lower() == 'false'):
 
95
  positions_status_value = 'CREATED'
96
  else:
 
97
  positions_status_value = 'CANCELLED'
98
 
99
  row = {