2017-02-27 3 views
1

J'essaie de changer le type d'une chaîne en un objet DateTimeOffset.Comment changer le type de chaîne en objet DateTimeOffset

var Result = Convert.ChangeType("2017-02-27T18:00:00.0000000+01:00", 
    typeof(DateTimeOffset), CultureInfo.InvariantCulture); 

J'ai essayé aussi avec ces cordes

2017-02-27 18:00:00Z

02/27/2017 18:00:00

Mais j'obtiens toujours un InvalidCastException. Quelle est la chaîne correcte à transmettre au ChangeType? Pour des raisons de développement, je ne peux pas utiliser la méthode DateTimeOffset.Parse.

+0

Pouvez-vous utiliser 'DateTime.Parse'? Si oui, convertir 'DateTime' en' DateTimeOffset' est trivial –

+0

Malheureusement pour des raisons de développement je ne peux pas utiliser DateTimeOffset.Parse – Matteo

+0

Juste un FYI, DateTime.Parse et DateTimeOffset.Parse ne sont pas les mêmes. Il posait des questions à propos d'une autre fonction, pas celle que vous avez spécifiquement dit que vous ne pouviez pas utiliser dans le post. – Aaron

Répondre

1

Si vous ne pouvez pas utiliser DateTime.Parse(), essayez ceci:

var dateTime = (DateTime)Convert.ChangeType(stringDateTime, 
     typeof(DateTime), CultureInfo.InvariantCulture); 

var dateTimeOffset = new DateTimeOffset(dateTime); 

Cela semble fonctionner pour toutes les chaînes d'entrée d'échantillons dans votre question.


Vous pouvez essayer TypeDescriptor.GetConverter():

var converter = TypeDescriptor.GetConverter(typeof(DateTimeOffset)); 
var result = converter.CanConvertFrom(typeof(string)) ? 
    (DateTimeOffset)converter.ConvertFrom(stringDateTime) : 
    new DateTimeOffset(); 

Mais cela ne fonctionne pas lorsque vous essayez de convertir 02/27/2017 18:00:00.

Vérifiez this SO question pour des détails sur string à DateTimeOffset conversion.