Autore Topic: Bel problema con le TimeZone...  (Letto 2058 volte)

Offline Vytek

  • Translate Team
  • Utente junior
  • **
  • Post: 125
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung S5
  • Sistema operativo:
    Windows 8.1
Bel problema con le TimeZone...
« il: 22 Agosto 2010, 17:43:25 CEST »
0
Mi trovo alle prese con un problema di NON facile situazione almeno in base alla mie attuali conoscenze. L'applicazione che sto sviluppando usa questa interessante libreria:

http://blog.luckycatlabs.com/2009/01/27/release-sunrisesunset-java-library/

Mi serve per il calcolo di Alba e Tramonto. Ora però c'e' un grosso problema. La chiamata richiede il TimeZone da cui calcolare il tutto. Ho passato le seguente chiamata:
Codice (Java): [Seleziona]
//Calcola Sunrise/Sunset
        //Location of sunrise/set, as latitude/longitude.  
        Location location = new Location(Double.toString(m_latlong[0]), Double.toString(m_latlong[1]));  
           
        // Create calculator object with the location and time zone identifier.  
        SunriseSunsetCalculator calculator = new SunriseSunsetCalculator(location, cal.getTimeZone().getDisplayName(true, TimeZone.SHORT, conf.locale));  
        Log.d(TAG, "TimeZone: "+cal.getTimeZone().getDisplayName(conf.locale));
        Log.d(TAG, "Time Zone Short: "+cal.getTimeZone().getDisplayName(true, TimeZone.SHORT, conf.locale));
                        String[] TZSTR = TimeZone.getAvailableIDs();
                        //Stampa tutti i TimeZone Disponibili
                        for(int i=0;i<TZSTR.length;i++){
                                Log.d(TAG, TZSTR[i]);
                        }
       
        //Calendar date = Calendar.getInstance();  
        String dawn = calculator.getCivilSunriseForDate(cal);  
        String dusk = calculator.getCivilSunsetForDate(cal);

Ma il TimeZone di Android è completamente differente dai TimeZone di default presenti nella libreria. Infatti quando vedo i dati in Debug tramite Logcat ottengo:

08-22 17:14:14.444: DEBUG/AlmanacList(9931): TimeZone: Ora Standard Europa Centrale
08-22 17:15:09.514: DEBUG/AlmanacList(9931): Time Zone Short: GMT+02:00

Ho fatto anche la lista delle TimeZone disponibili nella libreria e questa stringa non risulta per niente ;-( (SI veda file log.txt).
La libreria anche con dati di Long e Lat esatti mi restituisce quindi dati sbagliati.
Che fare? Scrivere allo sviluppatore per evidenziare l'errore? Oppure fare una codifica interna per venire incontro alla chiamata della libreria? Oppure magari sto sbagliando tutto ed ho capito male come funzionano i TimeZone in Java ed Android?

Un  grazie anticipato a chi potrà dare un aiuto...

Un cordiale saluto ed a presto...



Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline Vytek

  • Translate Team
  • Utente junior
  • **
  • Post: 125
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung S5
  • Sistema operativo:
    Windows 8.1
Re:Bel problema con le TimeZone...
« Risposta #2 il: 22 Agosto 2010, 21:48:35 CEST »
0
Ciao JD,
grazie del link. Avevo già visto il tuo snippet, ma penso non faccia al mio caso. Anche se infatti chiamassi la funzione "GMT" (getTimeZone("GMT")) otterrei una stringa con un TimeZone non valido per la funzione della libreria che a quanto pare accetta solo la stringa "Etc/GMT+02". Ho scritto anche allo sviluppatore della classe Java chiedendo lumi e consigli. A meno che non la debba creare io giuntando stringe e facendo varie conversioni? Sbaglio?

Un saluto e grazie ancora di tutto...

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Bel problema con le TimeZone...
« Risposta #3 il: 23 Agosto 2010, 08:41:56 CEST »
+1
Rieccomi, scusa per la risposta di prima, non avevo letto bene il topic.

Ci sto sbattendo la testa da più di un'ora e, cavolo, non sono ancora riuscito a fargli digerire la timezone del telefono.
Ho però notato una cosa un po' strana:
Se si imposta una TimeZone errata, una qualunque stringa di testo come ad esempio
Codice (Java): [Seleziona]
SunriseSunsetCalculator calculator = new SunriseSunsetCalculator(
                                location, "cicciobaciccio");

mi viene fuori come orario di alba tramonto 05:17 - 19:39.

Se invece imposto una TZ valida, come  "Europe/Rome" o "America/New_York" viene fuori lo stesso orario, molto vicino a quello corretto: 06:17 - 20:39.
Ripeto, questo capita sia con TZ "Europe/Rome"  che con TZ "America/New_York".
"Etc/GMT+2" mi genera invece il solito orario sballato (05:17).

Comunque stavo pensando ad un possibile workaround: se la TZ "America/New_York" funziona correttamente, potresti convertire l'ora locare del telefono in questa TZ, calcolare l'alba/tramonto e poi riconvertire gli orari nella TZ locale.
Non capisco però perché le TZ di Roma e New York generino lo stesso orario di alba/tramonto.

« Ultima modifica: 23 Agosto 2010, 08:48:38 CEST da JD »
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline Vytek

  • Translate Team
  • Utente junior
  • **
  • Post: 125
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung S5
  • Sistema operativo:
    Windows 8.1
Re:Bel problema con le TimeZone...
« Risposta #4 il: 23 Agosto 2010, 12:53:27 CEST »
0
Grazie JD di tutto l'aiuto che mi stai dando. Lo apprezzo veramente tanto e sono molto contento di mettere a disposizione il codice e l'esperienza delle varie soluzioni. La soluzione che mi prospetti mi sembra la più logica, ho solo un'ultima carta da giocare ovvero la risposta dello sviluppatore della libreria che mi ha mandato una possibile soluzione. Appena ho tempo leggo con attenzione che cosa mi dice e provo le varie soluzioni. rimane comunque la parte GPS che è tutta da scrivere e che sto testando basandomi sui vari link che mi hai consigliato. Oggi ci lavoro e vediamo cosa riesco a ricavarne...

Un salutone e grazie ancora di tutto...

P.S. Aggiorno qui la situazione in serata....

Offline Vytek

  • Translate Team
  • Utente junior
  • **
  • Post: 125
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung S5
  • Sistema operativo:
    Windows 8.1
Re:Bel problema con le TimeZone...
« Risposta #5 il: 23 Agosto 2010, 23:13:39 CEST »
0
Mi scrive lo sviluppatore della libreria questo consiglio:
 
Instead of calling cal.getTimeZone().getDisplayName(), use cal.getTimeZone().getID()

Che ne pensi? Mi sa che l'unica è provare :-)

Un saluto...

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Bel problema con le TimeZone...
« Risposta #6 il: 24 Agosto 2010, 08:14:41 CEST »
0
Ho fatto un Override & Update e ho notato che con cal.getTimeZone().getID() si riesce ad impostare correttamente la TZ :).

Si può marcare come risolto? ;)
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline Vytek

  • Translate Team
  • Utente junior
  • **
  • Post: 125
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung S5
  • Sistema operativo:
    Windows 8.1
Re:Bel problema con le TimeZone...
« Risposta #7 il: 24 Agosto 2010, 09:04:24 CEST »
0
Credo di si :-)

Grazie ancora di tutto....