2013-09-01 6 views
-1

J'essaye d'ajouter l'heure actuelle de téléphones à ma liste d'heure de date. J'ai besoin d'être capable de soustraire avec les tiques. J'ai essayé d'utiliser phonecurrentime.ToString("dd hh:mm"); mais parce que c'est une chaîne il n'y a pas de tics et toutes sortes d'erreurs!Comment travailler avec DateTime.Now cocher

Je dois travailler avec DateTime.now.

Voici mon code:

InitializeComponent(); 

List<DateTime> theDates = new List<DateTime>(); 
DateTime fileDate, closestDate; 

theDates.Add(new DateTime(2000, 1, 1, 10, 29, 0)); 
theDates.Add(new DateTime(2000, 1, 1, 3, 29, 0)); 
theDates.Add(new DateTime(2000, 1, 1, 3, 29, 0)); 

// This is the date that should be found 
theDates.Add(new DateTime(2000, 1, 1, 4, 22, 0)); 

// This is the date you want to find the closest one to 
fileDate = DateTime.Now; 

long min = long.MaxValue; 

foreach (DateTime date in theDates) 
{ 
    if (Math.Abs(date.Ticks - fileDate.Ticks) < min) 
    { 
     min = Math.Abs(date.Ticks - fileDate.Ticks); 
     closestDate = date; 
    } 
} 
+0

de quel type est phonecurrentime? Est-ce qu'il compile même? –

+4

On dirait un [XY-Problem] (http://www.perlmonks.org/?node_id=542341) – I4V

+0

Veuillez clarifier votre question. Quel est exactement le problème, où vous avez rencontré un problème? et pourquoi vous avez utilisé 'phonecurrentime.ToString (" dd hh: mm ")' pourquoi n'avez-vous pas utilisé 'DateTime.Now'? – ehsan88

Répondre

0
fileDate = phonecurrentime.ToString("dd hh:mm"); 

ne compilera pas. fileDate est un objet DateTime. Vous devez l'affecter à un autre objet DateTime, pas à un string. Si phonecurrenttime est DateTime, vous pouvez utiliser la méthode .ToString

fileDate = phonecurrenttime; 

Modifier

De votre commentaire, si vous voulez simplement attribuer le ddate/heure à fileDate vous pouvez utiliser DateTime.Now:

fileDate = DateTime.Now; 
+0

Cela ne fonctionnera pas avec datetime.now si – Jeremy

+0

@Jeremyc - ce sera. Vous devez faire fileDate = DateTime.Now; –

+0

Ne pas obtenir le temps le plus proche obtient le plus grand nombre à la place. si le temps le plus proche est 11:30 et le plus grand temps sur la liste il dira son 17:00 par exemple où il devrait dire 11:30 - Jeremyc juste maintenant éditer – Jeremy

2

si vous avez une chaîne et que vous voulez pour le convertir en DateTime vous pouvez utiliser

CultureInfo cf = new CultureInfo("en-us"); 

if(DateTime.TryParseExact("12 12:45", "dd hh:mm", cf, DateTimeStyles.None, out fileDate)) 
{ 
    // your code 
} 

et votre code ressemblerait à ceci:

List<DateTime> theDates = new List<DateTime>(); 
    DateTime fileDate, closestDate; 

    theDates.Add(new DateTime(2000, 1, 1, 10, 29, 0)); 
    theDates.Add(new DateTime(2000, 1, 1, 3, 29, 0)); 
    theDates.Add(new DateTime(2000, 1, 1, 3, 29, 0)); 

    // This is the date that should be found 
    theDates.Add(new DateTime(2000, 1, 1, 4, 22, 0)); 

    CultureInfo cf = new CultureInfo("en-us"); 
    string timeToParse = phonecurrentime.ToString("dd hh:mm"); 

    if(DateTime.TryParseExact(timeToParse, "dd hh:mm", cf, DateTimeStyles.None, out fileDate)) 
    { 
     long min = long.MaxValue; 

     foreach (DateTime date in theDates) 
     { 
      if (Math.Abs(date.Ticks - fileDate.Ticks) < min) 
      { 
       min = Math.Abs(date.Ticks - fileDate.Ticks); 
       closestDate = date; 
      } 
     } 
    } 

si vous voulez comparer la partie du temps de la dateTime vous pouvez utiliser la propriété TimeOfDay:

 TimeSpan ts = DateTime.Now.TimeOfDay; 

     foreach (DateTime date in theDates) 
     { 
      long diff = Math.Abs(ts.Ticks - date.TimeOfDay.Ticks); 

      if (diff < min) 
      { 
       min = diff; 
       closestDate = date; 
      } 
     } 
+0

Je n'en ai pas vraiment besoin d'une chaîne. J'ai juste besoin de datetime.now pour travailler avec des tiques. Va essayer – Jeremy

+0

@Jeremyc si vous regardez à la fin de ma réponse, vous verrez que je travaille avec DateTime.Now en ticks, et utiliser seulement la partie de l'heure de la DateTime –

1

Darren Davies ci-dessus est correcte.

Vous pouvez ajouter/soustraire des objets datetime. Le résultat est de type TimeSpan, ce qui vous permet de comparer facilement les différences de date et/ou d'heure.

En outre, vous devez donner un nom à chaque date que vous ajoutez à votre liste (assigner à une variable puis ajouter à la liste). Un mois plus tard, vous ne vous souviendrez pas de ce que chaque jour signifie;)

+0

Cela ne fonctionnera pas avec datetime.now – Jeremy