2017-10-12 5 views
0

J'essaie de convertir une chaîne en DateTimeOffset. voici un exemple de ma chaîne 2017/010/23:51:50 2017 représente l'année 010 représente le jour de l'année et 23:51:50 est l'heure. Je suis en train d'essayer ci-dessous mais il me renvoie 0001-01-01 00:00:00.0000000 +00:00 toujours aucune mater l'entrée est. Mon codeC#, convertir la chaîne en DateTimeOffset

DateTimeOffset DateTime; 
string year = ("2017/010/23:51:50"); 
DateTimeOffset.TryParse(year, out DateTime); 

Une suggestion?

Mise à jour Pour simplifier, je n'ai pas attardé ma question. Mon heure de date je reçois l'année (2017 it could be 2002, 2001) du nom d'un fichier .txt et le jour et l'heure (010/23:51:50 certains a le décalage et certains contenus ne pas) du contenu de ce fichier .txt. Donc, ma contribution n'est pas toujours la même. J'espère que cela clarifie

+0

Quand vous dites * jour de l'année *, voulez-vous dire entre 1 et 365? –

+2

Il a renvoyé * false *, ne l'ignorez jamais. Utilisez Parse() pour rester honnête. –

+0

Vous avez raison @OfirWinegarten – Shaif

Répondre

2

fendu d'abord la chaîne par/puis utilisez la valeur dayOfTheYear et l'année pour obtenir l'année/mois/jour. Ensuite, divisez le paramètre time et utilisez-le pour obtenir TimeSpan et l'ajouter à la date précédemment obtenue. Ensuite, il suffit d'analyser la date que vous venez d'obtenir dans DateTimeOffset. Ce code devrait fonctionner:

 string year = ("2017/010/23:51:50"); 
     var date = year.Split('/'); 
     var timeSpanVal = date[2].ToString().Split(':').Select(x=>Convert.ToInt32(x)).ToList(); 
     TimeSpan ts = new TimeSpan(timeSpanVal[0], timeSpanVal[1], timeSpanVal[2]); 
     DateTime newDate = new DateTime(Convert.ToInt32(date[0]), 1, 1).AddDays(Convert.ToInt32(date[1]) - 1)+ts; 

     DateTimeOffset.TryParse(newDate.ToString(), out DateTime); 
+0

Il n'est pas nécessaire de passer par une chaîne pour convertir 'DateTime' en' DateTimeOffset'. Cependant, vous devez savoir quel décalage vous souhaitez utiliser. –

1

En regardant à travers le date and time formats, je ne pense pas que vous pouvez analyser le format Year/JulianDay/Time. Ce que vous pouvez faire est de diviser la chaîne en plusieurs parties, puis ajoutez les jours à l'année

string[] parts = year.Split('/'); 
DateTime dt = new DateTime(int.Parse(parts[0]), 1, 1); 
dt = dt.AddDays(int.Parse(parts[1]) - 1).Add(TimeSpan.Parse(parts[2]));