2014-10-10 24 views
14

Quartz.net offre un metodo per ottenere la prossima volta del prossimo evento di trigger: http://quartznet.sourceforge.net/apidoc/1.0/html/html/cc03bb79-c0c4-6d84-3d05-a17f59727c98.htmCome convertire un UTC DateTimeOffset a un DateTime che utilizza il fuso orario sistemi

I documenti affermano che questo metodo restituisce un Trigger.GetNextFireTimeUtc()DateTime? ma in realtà restituisce un DateTimeOffset?. Non riesco davvero a capire cosa sia lo DateTimeOffset o perché questa funzione restituisca uno invece di un normale DateTime. Tutto quello che voglio è la prossima volta che il trigger verrà eseguito, ma nel mio fuso orario.

Ho fatto questo trigger.GetNextFireTimeUtc().Value.DateTime ma mi ha dato un tempo 2 ore in anticipo, vale a dire l'ora UTC. Come posso ottenere l'ora corretta secondo il mio computer?

+0

Utilizzare 'LocalDateTime'. si dovrebbe avere un [sguardo] [1] [1]: http://stackoverflow.com/questions/179940/convert-utc-gmt-time-to-local-time – TryToSolveItSimple

+0

Si può essere interessato a [DateTime vs DateTimeOffset] (http://stackoverflow.com/questions/4331189/datetime-vs-datetimeoffset). –

+1

Inoltre, stai guardando i documenti 1.0 di Quartz. Quartz 2.0 ha cambiato questo metodo per restituire un 'DateTimeOffset?', [Come mostrato qui] (http://quartznet.sourceforge.net/apidoc/2.0/html/html/e07a781b-39c8-db14-3421-c563497fe23c.htm). –

risposta

36

Si può semplicemente utilizzare la proprietà DateTimeOffset.LocalDateTime:

trigger.GetNextFireTimeUtc().Value.LocalDateTime 

Dalla documentazione:

Se necessario, la proprietà LocalDateTime converte la data e l'ora dell'oggetto DateTimeOffset corrente nella data e ora del sistema locale. La conversione è un'operazione in due fasi:

  • La proprietà converte tempo dell'oggetto DateTimeOffset corrente in Coordinated Universal Time (UTC).
  • La proprietà quindi converte l'ora UTC in ora locale.

Si dovrebbe davvero guardare in DateTimeOffset anche se - è un tipo importante per capire se si sta utilizzando il BCL per il lavoro di data/ora.

-1

Questo codice è quello di convertire UTC al locale

var local = utc.ToLocalTime(); 
+0

Questo * cambia * semplicemente cambiando il tipo di 'DateTime', senza cambiarne il valore. Se l'OP sta semplicemente visualizzando il valore, non vedranno alcuna modifica –

+0

L'OP sta infatti semplicemente visualizzando il valore – Dan