2010-12-10 37 views
5

Hãy nói rằng bạn có một chuỗi ngày như sau:ngày trong viết tắt

11/15/2010, 12/1/10, 12/2/10, 12/3/10, 12/4/10, 12/9/10 

Làm thế nào bạn sẽ rút ngắn chuỗi này như sau (hoặc một cái gì đó tương tự)

11/15/2010, 12/1-4, 9/10 

Bởi vì tưởng tượng 30 ngày liên tiếp nó sẽ là tốt hơn để xem 12/1-31/10 hơn có tất cả các ngày được liệt kê.

Chỉ để làm cho gọn hơn một chút?

Cảm ơn, thanh.

+0

Tôi giả sử chúng ta đang xem xét ngày ở định dạng tiếng Anh-Mỹ? –

+0

bên phải hoặc nếu có cách nào cho bất kỳ định dạng nào được hoan nghênh. – Rod

+0

Tôi không thấy mẫu rút ngắn. 11/1/2010 đến từ đâu? Và 9/10 là tháng và năm của ngày cuối cùng trong dữ liệu đầu vào, trong khi mục nhập trước đó trong đầu ra là một tháng và phạm vi ngày. – Amy

Trả lời

3
public class so_4413380 
{ 
    private class DateGroup 
    { 
     public IList<DateTime> Dates { get; set; } 

     public DateTime First 
     { 
      get { return Dates.OrderBy(d => d).FirstOrDefault(); } 
     } 

     public DateTime Last 
     { 
      get { return Dates.OrderBy(d => d).LastOrDefault(); } 
     } 

     public DateGroup() 
     { 
      Dates = new List<DateTime>(); 
     } 
    } 

    public void Execute() 
    { 
     var dateTimeFormat = CultureInfo.GetCultureInfo("en-US").DateTimeFormat; 
     var dates = new[] { "11/15/2010", "12/1/10", "12/2/10", "12/3/10", "12/4/10", "12/9/10" }; 
     var realDates = dates.Select(s => DateTime.Parse(s, dateTimeFormat)); 
     var dateGroups = new List<DateGroup>(); 

     DateTime lastDate = DateTime.MinValue; 
     foreach (var date in realDates.OrderBy(d => d)) 
     { 
      if (date.Month == lastDate.Month && (date - lastDate).Days <= 1) 
      { 
       var dateGroup = dateGroups.LastOrDefault(); 
       dateGroup.Dates.Add(date); 
      } 
      else 
      { 
       var dateGroup = new DateGroup(); 
       dateGroups.Add(dateGroup); 

       dateGroup.Dates.Add(date); 
      } 

      lastDate = date; 
     } 

     foreach (var dateGroup in dateGroups) 
     { 
      if (dateGroup.Dates.Count == 1) 
      { 
       Console.WriteLine(dateGroup.First.ToString(dateTimeFormat.ShortDatePattern, dateTimeFormat)); 
      } 
      else 
      { 
       int firstDay = dateGroup.First.Day; 
       int lastDay = dateGroup.Last.Day; 

       var dateString = dateTimeFormat.ShortDatePattern.Replace("d", firstDay + "-" + lastDay); 

       Console.WriteLine(dateGroup.First.ToString(dateString, dateTimeFormat)); 
      } 
     } 

     Console.ReadLine(); 
    } 
} 

Tạo

11/15/2010 
12/1-4/2010 
12/9/2010 
+0

+1 Để bao gồm cả văn hóa –

+0

Cảm ơn bạn rất nhiều vì sự giúp đỡ và một viễn cảnh tươi mới. – Rod

Các vấn đề liên quan