in

dotNet Umbria

Il primo User Group in Umbria sul mondo .Net
Latest post 05-08-2008 9:44 AM by p.tenace. 10 replies.
Page 1 of 1 (11 items)
Sort Posts: Previous Next
  • 03-03-2008 12:18 PM

    DateTime e localTime

     Allora ecco a voi un nuovo quesito. Big Smile

    Sto cercando di sfruttare le api di windows, piu' specifico quelle del gps per poi farmi restituire l'orario.

    In pratica faccio cosi

    GpsPosition position = new GpsPosition();

    DateTime updateDate;

    string Time; 

    Poi

    if (position.TimeValid)                   

    {

        updateData = position.Time.ToUniversalTime();

        Time = updateData.ToLocalTime().ToString();

    }

    Ma mi restituisce sempre l'ora di un ora indietro...Come posso risolvere? 

     

  • 03-03-2008 12:39 PM In reply to

    Re: DateTime e localTime

    Ad occhio e croce sembra corretto.. Senza fare delle prove, ad occhio gli unici casi in cui credo possa non funzionare (o comportarsi come descritto) sono:

    1 - Sul dispositivo è impostato il GMT+1 come timezone? Smile 

    2 -  Leggendo la documentazione (http://msdn2.microsoft.com/en-us/library/system.datetime.tolocaltime.aspx) potrebbe influire anche il tipo (property Kind) della data "sorgente"..

    Puoi verificare questi 2 punti e vedere se le cose migliorano? Big Smile

     

    Ciao 

    Fabrizio Bernabei   
    www.kitendo.com
    www.innovactive.it

  • 03-03-2008 12:57 PM In reply to

    Re: DateTime e localTime

    Puoi provare a forzare la localizzazione del thread attuale mettendo questo codice:

    Thread.CurrentThread.CurrentCulture = new CultureInfo("it-IT");

    Fammi sapere se ti risolve,

    Ciao

    Andrea Cruciani

  • 03-03-2008 12:58 PM In reply to

    Re: DateTime e localTime

    Fabrizio Bernabei:

    Ad occhio e croce sembra corretto.. Senza fare delle prove, ad occhio gli unici casi in cui credo possa non funzionare (o comportarsi come descritto) sono:

    1 - Sul dispositivo è impostato il GMT+1 come timezone? Smile 

    Si 

    Fabrizio Bernabei:

    2 -  Leggendo la documentazione (http://msdn2.microsoft.com/en-us/library/system.datetime.tolocaltime.aspx) potrebbe influire anche il tipo (property Kind) della data "sorgente"..

    Non ho ben capito come modificarlo.

     

    GRAZIE Stick out tongue 


  • 03-03-2008 2:52 PM In reply to

    Re: DateTime e localTime

    Andrea Cruciani:

    Puoi provare a forzare la localizzazione del thread attuale mettendo questo codice:

    Thread.CurrentThread.CurrentCulture = new CultureInfo("it-IT");

    Fammi sapere se ti risolve,

    Ciao

     

    Non funge dandomi l'errore

    System.Threading.Thread' non contiene una definizione per 'CurrentCulture'   

    Credo che sia un problema di compact Framework. 

  • 03-03-2008 3:21 PM In reply to

    Re: DateTime e localTime

    p.tenace:

    Fabrizio Bernabei:

    2 -  Leggendo la documentazione (http://msdn2.microsoft.com/en-us/library/system.datetime.tolocaltime.aspx) potrebbe influire anche il tipo (property Kind) della data "sorgente"..

    Non ho ben capito come modificarlo.

    Allora, leggendo la documentazione mi sembra di capire che il metoto ToLocalTime() faccia quello che ti aspetti solo se la proprietà Kind dell'istanza DateTime di partenza è impostata al valore 'Utc' o 'Unspecified' (in questo caso viene assunto che il contenuto sia di tipo Utc per default). Nel caso in cui invece la proprietà Kind sia valorizzata a 'Local' questo metodo non effettua nessuna conversione.

    Quindi andrebbe verificato che prima della chiamata al metodo ToLocalTime la proprietà Kind sia valorizzata con 'Utc' o "Unspecified (quest'ultimo dovrebbe essere il valore di default comunque) ed in caso negativo puoi comeunque cambiare questo valore per mezzo del metodo SpecifyKind().

    Un metodo alternativo a questo invece potrebbe essere quello di chiamare direttaemente il metodo ToString() forzando la cultura da utilizzare in questo modo:

    updateData.ToString(CultureInfo.CreateSpecificCulture("it-IT"));
    Fammi sapere come va a finire Stick out tongue
    Casomai facciamo un mini-demo per approfondire..

     

    Fabrizio Bernabei   
    www.kitendo.com
    www.innovactive.it

  • 03-03-2008 3:42 PM In reply to

    Re: DateTime e localTime

     

    Fabrizio Bernabei:

    p.tenace:

    Fabrizio Bernabei:

    2 -  Leggendo la documentazione (http://msdn2.microsoft.com/en-us/library/system.datetime.tolocaltime.aspx) potrebbe influire anche il tipo (property Kind) della data "sorgente"..

    Non ho ben capito come modificarlo.

    Allora, leggendo la documentazione mi sembra di capire che il metoto ToLocalTime() faccia quello che ti aspetti solo se la proprietà Kind dell'istanza DateTime di partenza è impostata al valore 'Utc' o 'Unspecified' (in questo caso viene assunto che il contenuto sia di tipo Utc per default). Nel caso in cui invece la proprietà Kind sia valorizzata a 'Local' questo metodo non effettua nessuna conversione.

    Quindi andrebbe verificato che prima della chiamata al metodo ToLocalTime la proprietà Kind sia valorizzata con 'Utc' o "Unspecified (quest'ultimo dovrebbe essere il valore di default comunque) ed in caso negativo puoi comeunque cambiare questo valore per mezzo del metodo SpecifyKind().

    Un metodo alternativo a questo invece potrebbe essere quello di chiamare direttaemente il metodo ToString() forzando la cultura da utilizzare in questo modo:

    updateData.ToString(CultureInfo.CreateSpecificCulture("it-IT"));
    Fammi sapere come va a finire Stick out tongue
    Casomai facciamo un mini-demo per approfondire..

     

    Ancora niente ho provato sia a specificare il kind:

    updateData = DateTime.SpecifyKind(position.Time, DateTimeKind.Utc); cosi e

    updateData = DateTime.SpecifyKind(position.Time.toUniversalTime(), DateTimeKind.Utc);  // cosi mi indica 3 ore in meno

    e

    sia: updateData.ToString(CultureInfo.CreateSpecificCulture("it-IT"));

    senza nessun risultato 

    PS: Ovviamente non tutto insieme ma le varie combinazioni. 

  • 03-13-2008 11:57 AM In reply to

    Re: DateTime e localTime

    Altri suggerimenti ? 

  • 03-17-2008 8:58 PM In reply to

    Re: DateTime e localTime

    Salve

    guardando il tuo codice mi viene in mente che in realtà il problema potrebbe risiedere proprio nell'orario che ottieni dal GPS (position.Time). Mi spiego meglio: i dispositivi GPS di solito usano e restituiscono il tempo UTC (o GMT come  preferisci) e cioè l'orario di Greenwich. Questo fatto da solo, però, non spiega perchè le chiamate a ToUniversalTime e poi a ToLocalTime non rimettano le cose a posto. La spiegazione di questo potrebbe stare nell'oggetto Datetime. Dalla documentazione di Microsoft (http://msdn2.microsoft.com/en-us/library/system.datetime.aspx) si legge:

    Calculations and comparisons of DateTime objects are meaningful only if the objects represent times in the same time zone. You can use a TimeZoneInfo object to represent a DateTime value's time zone, although the two are loosely coupled. (That is, a DateTime object does not have a property that returns an object that represents that date and time value's time zone other than the Kind property.) For this reason, in a time zone-aware application, you must rely on some external mechanism to determine the time zone in which a DateTime object was created

    Questo lascia pensare che in realtà la chiamata "position.Time" restituisca un Datetime che contiene l'ora di Greenwich,ma che non contiene alcuna informazione sulla sua Time Zone, quindi dal sistema viene considerato come un orario riferito al tuo fuso locale (ed indietro di un'ora rispetto a quest'ultimo). Quando tu esegui le due chiamate:

     updateData = position.Time.ToUniversalTime();    Time = updateData.ToLocalTime().ToString();

    porti quest'orario indietro di un'altra ora (e fanno 2 rispetto a noi) e poi avanti di una (e torni a -1).

    Per verificare se è questo il problema potresti provare a scrivere quale orario ti viene tornato con  position.Time. Se il problema è questo dovrebbe essere L'ora locale - 1.

    Spero sia di aiuto.  Saluti
  • 04-05-2008 10:19 PM In reply to

    Re: DateTime e localTime

    Com'è finita? Risolto il problema?
    Altrimenti puoi provare a condividere qaulche pezzo di codice, in modo da capire meglio il problema..

    Ciao 

    Fabrizio Bernabei   
    www.kitendo.com
    www.innovactive.it

  • 05-08-2008 9:44 AM In reply to

    Re: DateTime e localTime

    Questo lascia pensare che in realtà la chiamata "position.Time" restituisca un Datetime che contiene l'ora di Greenwich,ma che non contiene alcuna informazione sulla sua Time Zone

    In effetti il problema era proprio questo..Ho risolto in questo modo (scusate il ritardo):

    DateTime utcTime = new DateTime(position.Time.Year,position.Time.Month,position.Time.Day,position.Time.Hour,

    position.Time.Minute,position.Time.Second,DateTimeKind.Local); //dove position time è il datetime del gps

    int UTChours = utcTime.Hour;
    int UTCMinute = utcTime.Minute;
    int UtcSecond = utcTime.Second;
    int UtcMillisecond = utcTime.Millisecond

    DateTime today = DateTime.Now.ToUniversalTime();
    DateTime satelliteTime = new DateTime(today.Year, today.Month, today.Day, UTChours, UTCMinute, UtcSecond, UtcMillisecond);

    e poi satelliteTime.toLocalTime() restituisce l'ora esatta.

    Grazia a tutti!!          

Page 1 of 1 (11 items)
dotNet Umbria 2007-2008
Powered by Community Server (Commercial Edition), by Telligent Systems