2010-07-30 6 views
2

Je fais du googling depuis un moment maintenant et pour la vie de ma part, je n'arrive pas à trouver une solution. Je pensais que ce serait facile, mais ça prend trop de temps et je me tourne vers stackoverflow.Convertir la chaîne au format DateTime spécifique

Je dois convertir une chaîne contenant une date et une heure en une variable DateTime. J'ai formaté la chaîne dans le format exact dans lequel je veux la stocker, mais quand je la convertis en DateTime, elle continue d'ajouter les secondes que je ne veux pas. Je le veux stocké comme 01/01/2010 09:00. Voici le code que j'ai utilisé jusqu'à présent:

DateTime.ParseExact(startTime,"MM/dd/yyyy hh:mmtt", null); 

..mais il y ajoute des secondes. S'il vous plaît donnez votre avis.

+0

Veuillez ne pas dupliquer des balises comme "ASP.NET C#" dans le titre. Laissez-les simplement dans les tags. –

Répondre

7

Si elle est stockée en tant que type de données DateTime, il est correctement stocké, mais votre interface utilisateur est afficher mal. Le type de données DateTime a toujours les secondes (millisecondes, etc) indépendamment de la façon dont vous définissez la valeur. Le problème est dans la façon dont il est affiché à l'utilisateur.

Vous devez afficher la date que vous voulez dans le format de chaîne de droite à l'heure d'affichage dans

Label1.Text = startTime.ToString("MM/dd/yyyy hh:mmtt"); 

Edition - ajouté

Pour formater dans un GridView, voir ici: http://peterkellner.net/2006/05/24/how-to-set-a-date-format-in-gridview-using-aspnet-20using-htmlencode-property/

+0

im doing string-> DateTime, pas DateTime-> string ... Je dois stocker cela dans une base de données avec le type DateTime –

+1

Voir mon edit ... Vous ne pouvez pas changer comment la base de données (ou .Net runtime, etc) stocké un type de données particulier. Comme le dirait Yogi Berra s'il était programmeur, le type de données est ce qu'il est et contient les champs qu'il contient. Un type de données datetime aura les secondes indépendamment de la façon dont vous l'insérez. C'est vraiment juste une question de comment il est affiché pour vous. – David

+0

À moins, bien sûr, que vous définissiez votre propre type de données ... – David

3

Je pense que quand vous dites qu'il ajoute des secondes, vous voulez dire quand vous essayez de le lire il lit aussi les secondes, vous voulez faire quelque chose comme

DateTime parsedDateTime = DateTime.ParseExact(startTime, "MM/DD/YYYY hh:mmtt", null); 
string dateTime = parseDateTime.ToString("MM/DD/YYY hh:mmtt"); 

classe DateTime toujours a secondes et millisecondes, et je crois nanosecondes sont déjà stockées. Toujours, Que vous les remplissiez ou non, il suppose le, bien que vous ayez juste à formater comment vous lisez l'information de l'objet DateTime pour le faire ne pas vous donner les morceaux de données DateTime que vous n'avez pas remplis ou n'utilisez pas .

Si vous le stockez dans une base de données, comprenez que la base de données stocke également toutes ces informations, que vous les lui donniez ou non. Il existe différents types SQL DateTime comme SmallDate et etc qui stockent des quantités variables de données DateTime, ne savent pas s'il y en a un qui stocke à l'heure et pas aux secondes aussi, mais avec SQL, vous pouvez également formater la façon dont vous sélectionnez les données ou sélectionnez-le simplement dans votre objet C# en tant qu'objet C# DateTime, puis, lorsque vous le reprenez, formatez ToString() pour qu'il ne présente pas les données que vous ne voulez pas avoir.

1

Essayez ceci.

DateTime dt; 
    if (DateTime.TryParse(startTime, out dt)) 
    { 
     string newDateTime = dt.ToString("MM/dd/yyyy hh:mmtt"); 
    } 
0

Si vous avez une chaîne, vous devez d'abord garantir qu'elle peut effectivement être convertie en date/heure.
Alors d'abord, faites-le. Une fois que vous avez un datetime, stockez-le dans une base de données telle quelle, vous n'avez pas besoin d'être copncerné sur le format (comme d'autres l'ont dit ici).

puis, si vous avez besoin, reformater à une autre représentation que si vous avez besoin pour l'afficher quelque part ..

string s = "21 June 2010 09:23:56"; 
DateTime dt; 
if (DateTime.TryParse(s, out dt)) 
    // dit is a valid datetime, storeit or whatever 
else 
    throw ApplicationException(
     "{0} is not a valid datetime.", s); 
// -- and now you can redisplay dt any way you want ----- 
debug.Print(s.ToString("d MMM yyyy"); 
debug.Print(s.ToString("HH:mm:ss"); 
debug.Print(s.ToString("dddd, d MMM yy"); 
debug.Print(s.ToString("MMM d, yyyy"); 
debug.Print(s.ToString("HH:mm:ss dddd"); 

// etc ...

0

Voici un exemple pour cela.

String strDate="12/20/2013"; 
    string strFormat="dd/MM/yyyy"; 
    DateTime objDT; 

    if (DateTime.TryParseExact(strDate, strFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out objDT) == true) 
    { 
     Response.Write("<b>Formatted DateTime : </b>" + objDT.ToString()); 
    } 
    else 
    { 
     Response.Write("<b>Not able to parse datetime.</b>"); 
    } 
Questions connexes