2017-04-26 1 views
0

J'essaie d'importer des événements facebook sur mon site Web. Ils proviendront de différentes régions. Par exemple, un événement est dans l'heure de l'Est (-4 heures de différence par rapport à l'heure UTC) et mon heure locale est l'heure du Centre (différence de -5 heures par rapport à l'heure UTC). J'appelle leur API graphique à partir d'une application de console. Je reçois la date des événements comme celui-ci:C# Conversion de la chaîne en DateTime sans utiliser DateTimeOffset

// get event items 
me = fbClient.Get(url); 
var startTime = me["start_time"]; 
var endTime = me["end_time"]; 

l'heure de début indique: "2017-04-30T13: 00: 00-0400" objet {string}

Lorsque je tente de convertir cette chaîne dans un type DateColumn, il change l'heure de sortie en: var dateTime = Convert.ToDateTime (startTime); Il a décalé l'heure de 13 à> 12, comment puis-je convertir la chaîne en date en utilisant DateTime et ne pas utiliser DateTimeoffset?

Cet exemple montre comment le faire en utilisant DateTimeOffset, mais j'ai besoin du mien dans le type DateTime? https://stackoverflow.com/a/19403747/1019042

+0

Peut-être http://nodatime.org/ a quelques méthodes pour faire usefull ce. Je pense que vous devez indiquer à l'objet datetime que l'heure à laquelle vous travaillez est UTC -4 – Webbanditten

+0

'DateTime' ne peut stocker que l'heure locale et l'heure UTC, pas les autres fuseaux horaires, c'est pourquoi il convertit. Pourquoi voulez-vous éviter 'DateTimeOffset'? N'est-ce pas ce que c'est? – hvd

+0

'DateTimeOffset' possède une propriété' DateTime' - utilisez-la. –

Répondre

2

Vous pouvez utiliser la propriété DateTime de DateTimeOffset comme la réponse acceptée dans le lien que vous avez fourni.

Ou, si vous vraiment aimez faire juste avec DateTime vous pouvez si vous coupez le fuseau horaire de la chaîne:

var dt = DateTime.ParseExact(startTime.Substring(0,19), 
           "yyyy-MM-ddTHH:mm:ss", 
           CultureInfo.InvariantCulture);