2012-04-18 10 views
5

jestem pewien, że to musi być proste, ale nie mogę dowiedzieć się, jak to poprawnie słowo w Google ...analizowaniem Okres od ciąg w tym formacie

Mam config, który ma pole:

TimeToPoll="1d" 

teraz chcę zrobić coś jak:

TimeSpan.Parse(TimeToPoll); 

Wracając żądany przedział czasu jednego dnia.

W języku C#

EDIT: szukam sposobu, który pozwala parse z „1d”, jak również „1s” lub „1Y” itd. Czy to możliwe?

Znaczenie:

 "1d" parses to {1.00:00:00} 
    "1h" parses to {0.01:00:00} 
    "1m" parses to {0.00:01:00} 
    "1s" parses to {0.00:00:01} 
+0

Przepraszam, mam zaktualizowany. –

+0

dlaczego d w 'TimeToPoll' – Marshal

+0

sprawdź ten link: http://msdn.microsoft.com/en-us/library/system.timespan.days.aspx – Milee

Odpowiedz

0

d nie jest potrzebna i jest powodem Twojego parse zawiedzie.

var oneDay = TimeSpan.Parse("1"); 

Aktualizacja:

Do czego szukasz zrobić, nie ma wbudowanego wsparcia. Musisz napisać własny parser.

+0

Wymagałoby to - TimeSpan.FromDays (double.Parse ("1")); –

+0

@MatthewCanty - Nie śledzę. To, co napisałem, jest ważne. – Oded

+0

Ah, więc tak. Przepraszam. Po prostu nie sądziłem, że stanie się coś tak niejednoznacznego. Sądziłem, że zwróciłby najmniejszą możliwą wartość. –

0

Powinieneś przechowywać swoje wartości w pliku konfiguracyjnym w jednym z formatów, z którymi może pracować TimeSpan.Parse. Na tej stronie znajduje się kilka próbek.

EDYCJA: Przykłady znajdują się w kodzie w dolnej części strony.

4

To moja rozdzielczość:

public static TimeSpan ConvertToTimeSpan(this string timeSpan) 
    { 
     var l = timeSpan.Length - 1; 
     var value = timeSpan.Substring(0, l); 
     var type = timeSpan.Substring(l, 1); 

     switch (type) 
     { 
      case "d": return TimeSpan.FromDays(double.Parse(value)); 
      case "h": return TimeSpan.FromHours(double.Parse(value)); 
      case "m": return TimeSpan.FromMinutes(double.Parse(value)); 
      case "s": return TimeSpan.FromSeconds(double.Parse(value)); 
      case "f": return TimeSpan.FromMilliseconds(double.Parse(value)); 
      case "z": return TimeSpan.FromTicks(long.Parse(value)); 
      default: return TimeSpan.FromDays(double.Parse(value)); 
     } 
    }