2010-08-24 7 views
2

Des idées? Je ne peux pas en trouver.Comment convertir une date de nombres entiers en une chaîne de date formatée (par exemple, 2012009 au 2/01/2009)

J'ai une liste des dates que je suis chargement depuis un fichier csv et ils sont enregistrés comme tous les entiers, ou plutôt une chaîne de nombres entiers (ie 1 janvier 2009 = 1012009)

Toutes les idées sur la façon transformer 1012009 en 1/01/2009?

Merci!

+0

attention à des zéros non significatifs. – thelost

+1

Est-ce que «Mddyyyy» ou «dMMyyyy»? Le 1er janvier n'aide pas beaucoup ':)' – Kobi

+0

Le format est à la fois MMddyyyy et Mddyyyy. J'ai marqué l'autre réponse comme la réponse parce que cela a fonctionné le mieux pour moi. Celui-ci pourrait fonctionner aussi bien. – waskelton4

Répondre

2
int date = 1012009; 

var month = date/1000000; 
var day = (date/10000) % 100; 
var year = date % 10000; 

var formatted = new DateTime(year, month, day).ToString(); 

Ceci suppose mois-jour-année; Si les chiffres sont jour-mois-année, je suis sûr que vous serez en mesure d'échanger les variables du mois et du jour pour s'adapter à cela.

Si vous voulez personnaliser le format de date, vous pouvez le faire comme décrit dans:

+2

Je ne le prendrais pas comme un entier quand il est lu à partir d'un csv (texte) et formaté comme une date sans séparateurs. Je voudrais directement l'analyser à partir de la chaîne. –

6

Depuis la date est stockée sous forme de chaîne , vous pouvez vouloir utiliser ParseExact:

DateTime date = DateTime.ParseExact("28012009", "dMMyyyy", null); 

ParseExact lèvera une exception si le format ne correspond pas. Il a d'autres surcharges, où vous pouvez spécifier plus d'un seul format possible, si cela est nécessaire. Notez que provider est null, qui utilise la culture actuelle.
Selon le style que vous souhaitez utiliser TryParseExact.

0

Laissez 10102009 être dateInt.

string dateString = dateInt.ToString(); 
int l = dateString.Length; 
dateString = dateString.Insert(l-3,"/"); 
dateString = dateString.Insert(l-6,"/"); 

Vous devriez maintenant avoir 1/01/2009 à dateString .. Vous pouvez aussi essayer la fonction ParseExact ..

+0

Annulation du résultat de 'Insert'. – Timwi

+0

n'est toujours pas chaud - 'dateString' est un' int', et 'l' devrait être' int'. Il est généralement préférable d'exécuter le code en premier, assurez-vous que cela fonctionne. – Kobi

Questions connexes