2012-04-18 35 views
5

Tôi chắc chắn đây phải là đơn giản, nhưng tôi không thể tìm ra cách để từ đó một cách chính xác trong Google ...Parsing TimeSpan từ chuỗi bao gồm định dạng

Tôi có một cấu hình trong đó có một lĩnh vực:

TimeToPoll="1d" 

Bây giờ tôi muốn làm điều gì đó như:

TimeSpan.Parse(TimeToPoll); 

Trả về một khoảng thời gian của một ngày.

Trong C#

EDIT: Tôi đang tìm kiếm một phương pháp cho phép phân tích cú pháp của "1d" cũng như "1s" hoặc "1n" vv Đây có phải là có thể?

Ý nghĩa:

 "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

lời xin lỗi của tôi, tôi đã được cập nhật. –

+0

lý do tại sao d trong 'TimeToPoll' – Marshal

+0

kiểm tra liên kết này: http://msdn.microsoft.com/en-us/library/system.timespan.days.aspx – Milee

Trả lời

0

Các d là không cần thiết và là lý do phân tích cú pháp của bạn bị lỗi.

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

Cập nhật:

Đối với những gì bạn đang tìm kiếm để làm, không có xây dựng trong hỗ trợ. Bạn sẽ cần phải viết trình phân tích cú pháp của riêng bạn.

+0

Điều này sẽ cần - TimeSpan.FromDays (double.Parse ("1")); –

+0

@MatthewCanty - Tôi không theo. Những gì tôi đã viết là hợp lệ. – Oded

+0

Ah, vậy là vậy. Lấy làm tiếc. Tôi chỉ không nghĩ rằng một cái gì đó rất mơ hồ có thể xảy ra. Tôi cho rằng nó sẽ trả lại giá trị nhỏ nhất có thể. –

0

Bạn nên lưu trữ các giá trị của mình trong tệp cấu hình ở một trong các định dạng mà TimeSpan.Parse có thể hoạt động. Có một số mẫu trên trang đó.

EDIT: Các ví dụ nằm trong mã ở cuối trang.

4

Đây là độ phân giải của tôi:

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)); 
     } 
    } 
Các vấn đề liên quan