如何使用linq分割日期字符串并转换为UTC日期

时间:2016-02-12 16:41:25

标签: c# asp.net .net linq

我用逗号分隔包含日期的字符串,并希望以UTC格式转换它。

我写了这段代码:

daterange1.Select(t => t.Split(',').Select(r => r.Replace(r, TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse(r), selectedTimeZone).ToString())));

但它只是转换第一个元素而不是所有元素。

有什么建议吗?

修改

daterange = "2016-02-15 17:30:00,2016-02-15 18:00:00;2016-02-16 17:30:00,2016-02-16 18:00:00";

var daterange1 = dateRange.Split(';');

daterange1.Select(t => t.Split(',').Select(r => r.Replace(r, TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse(r), selectedTimeZone).ToString())));

每个逗号分隔的字符串都包含startdate和enddate。

2 个答案:

答案 0 :(得分:5)

这样做 - 经过测试

var dates = "2016-02-15 17:30:00,2016-02-15 18:00:00,2016-02-16 17:30:00,2016-02-16 18:00:00";
DateTime[] utcDates = dates.Split(',').Select(d => DateTime.Parse(d)).Select(dt => dt.ToUniversalTime()).ToArray();

foreach (var d in utcDates)
{
       Console.WriteLine(d);
}
@mxmlc指出我的答案并不完全是答案。所以,这是另一个应该肯定回答的变体。它包含以逗号分隔的开始/结束和分号分隔的日期集

var dates = "2016-02-15 17:30:00,2016-02-15 18:00:00;2016-02-16 17:30:00,2016-02-16 18:00:00";

// prepare results
// Legend: se = start/end; sed = stard-end date
var utcDates = dates.Split(';').
               Select(se => se.Split(',')).
               Select(se => new DateTime[]{ 
                                  DateTime.Parse(se[0]).ToUniversalTime(), 
                                  DateTime.Parse(se[1]).ToUniversalTime()});

// print out results                
utcDates.Select(sed => string.Format("Start Date: {0}; End Date: {1}", sed[0], sed[1])).
         ToList().
         ForEach(r => Console.WriteLine(r));

答案 1 :(得分:1)

你可以这样做:

Select DISTINCT
       Customer_No,
       Name,
       ( SELECT MIN(REPLACE(Telephone_No, ' ', '') )
         FROM #PSR_Telephone t2
         WHERE t2.customer_No = t1.Customer_No
           AND LEFT(Telephone_No,2) = '07'
       ) AS [Telephone_No_1] , 
       ( SELECT MAX(REPLACE(Telephone_No, ' ', ''))
         FROM #PSR_Telephone t2
         WHERE t2.customer_No = t1.Customer_No
           AND LEFT(Telephone_No,2) = '07'
      ) AS [Telephone_No_2],
      ( SELECT MIN(REPLACE(Telephone_No, ' ', ''))
        FROM #PSR_Telephone t2
        WHERE t2.customer_No = t1.Customer_No
          AND LEFT(Telephone_No,2) <> '07'
      ) AS [Telephone_No_3],
      ( SELECT MAX(REPLACE(Telephone_No, ' ', ''))
        FROM #PSR_Telephone t2
        WHERE t2.customer_No= t1.Customer_No
          AND LEFT(Telephone_No,2) <> '07'
      ) AS [Telephone_No_4],
      Primary_Addressable_Object,
      Street_Name,
      Postcode
from #PSR_Telephone t1
where Customer_No = '635532'

没什么特别之处,但如果需要你可以选择一个TimeZone(参见注释行)。我已经使用动态来让我更容易,但你可以创建一个类。