2016-06-19 13 views
-1

Vor einiger Zeit habe ich diesen Code in Java geschrieben, dessen Grundfunktion es ist, die nächste Zeit anzuzeigen, wenn die aktuelle Zeit mit einer 'Liste' verglichen wird, die Zeiten enthält. Bisher funktioniert es und unten ist, was ich habe:Java zu C# - Nächste Zeit anzeigen

import java.time.LocalTime; 
import java.util.TreeSet; 

TreeSet<LocalTime> times = new TreeSet<>(); 

     times.add(LocalTime.parse("05:40")); 
     times.add(LocalTime.parse("06:40")); 
     times.add(LocalTime.parse("08:30")); 
     times.add(LocalTime.parse("09:45")); 
     times.add(LocalTime.parse("10:35")); 
     times.add(LocalTime.parse("11:10")); 
     times.add(LocalTime.parse("11:55")); 
     times.add(LocalTime.parse("12:20")); 
     times.add(LocalTime.parse("13:30")); 
     times.add(LocalTime.parse("14:55")); 
     times.add(LocalTime.parse("16:00")); 
     times.add(LocalTime.parse("16:30")); 
     times.add(LocalTime.parse("17:30")); 
     times.add(LocalTime.parse("19:00")); 
     times.add(LocalTime.parse("20:10")); 
     times.add(LocalTime.parse("21:10")); 

LocalTime ceiling = times.ceiling(LocalTime.now()); 
LocalTime first = times.first(); 

if (ceiling != null) { 
      System.out.println("Bus is at: " + ceiling); 
     } else { 
      System.out.println("There are no more busses at this time. Next one will go in: " + first); 
     } 

Also, es aktuelle Zeit in Anspruch nimmt, vergleichen Sie es mit den ‚mal‘ und zeigt nächstgelegene in der es auf dem Bildschirm.

Bisher ist die C# -Version ich habe, ist:

var timeOfDay = DateTime.Now.ToString("HH:mm"); 

     Console.WriteLine(timeOfDay); 

     var time = new SortedSet<DateTime> 
     { 
      DateTime.Parse("05:40"), 
      DateTime.Parse("06:40"), 
      DateTime.Parse("08:30"), 
      DateTime.Parse("09:45"), 
      DateTime.Parse("10:35"), 
      DateTime.Parse("11:10"), 
      DateTime.Parse("11:55"), 
      DateTime.Parse("12:20"), 
      DateTime.Parse("13:30"), 
      DateTime.Parse("14:55"), 
      DateTime.Parse("16:00"), 
      DateTime.Parse("16:30"), 
      DateTime.Parse("17:30"), 
      DateTime.Parse("19:00"), 
      DateTime.Parse("20:10"), 
      DateTime.Parse("21:10") 
     }; 

     var first = time.First(); 
     var last = time.Last(); 

     Console.WriteLine("Bus is at: " + first); 

     Console.WriteLine("There are no more busses at this time. Next one will go in: " + last); 

Ein letztes Stück des Puzzles wird nächste Zeit angezeigt werden, im Vergleich zu den aktuellen.

Meine Frage ist: Was ist der beste Weg, so etwas in C# zu tun?

+0

verwenden Haben Sie versucht, diese Lösung? http://StackOverflow.com/a/1757189/1758369 – Danellos

+0

Bitte geben Sie mehr Sorgfalt in den Titel Ihrer Frage zu schreiben. Wenn sich Ihre Frage in etwa mit der TreeSet-Sammlung deckt, sagen Sie es. –

Antwort

0

Muss SortedSet ist das gleiche wie TreeSet in Java.

https://msdn.microsoft.com/en-us/library/dd412070(v=vs.100).aspx

Nächste Zeit

var set = new SortedSet<DateTime>(); 
    var time = DateTime.Now; 

    //2 sample values to test with 
    set.Add(time.AddHours(1)); 
    set.Add(time.AddHours(-1)); 

    //We temporarily add our time to the set 
    set.Add(time); 
    var next = set.SkipWhile(a => !a.Equals(time)).Skip(1).FirstOrDefault(); 
    var previous = set.Reverse().SkipWhile(a => !a.Equals(time)).Skip(1).FirstOrDefault(); 

    //and remove it in the end 
    set.Remove(time); 

Als Basil unten erwähnt, für Localtime können Sie Noda Time Bibliothek

+0

Woher wissen Sie, dass es das Gleiche ist? Link-Only-Antworten werden nicht allgemein akzeptiert –

+0

SortedSet ist in der Tat der nächste in .NET zu TreeSet. Der schwierigere Teil bestimmt das Äquivalent zu LocalTime. –

+0

Für "LocalTime" auf .Net, schauen Sie sich die [Noda Time] (http://nodatime.org/) Bibliothek an. Inspiriert von den Java-Frameworks, Joda-Time und java.time. –