2017-08-17 87 views
1

我有从数据库数据生成xml的代码。将字符串转换为正确的日期字符串

这里是它

public HttpResponseMessage Index(DateTime today) 
    { 
     var timeTables = db.TimeTables 
      .Where(c=> c.Today == today) 
      .Select(c => new 
      { 
       c.INN, 
       c.StartDay, 
       c.StartPause, 
       c.EndPause, 
       c.EndDay 
      }).AsEnumerable(); 

     var xdoc = new XDocument(
      new XElement("data", 
       timeTables.Select(w => 
        new XElement("worker", 
         new XAttribute("id", w.INN), 
         new XElement("start", w.StartDay), 
         new XElement("pause", w.StartPause), 
         new XElement("continue", w.EndPause), 
         new XElement("end", w.EndDay) 
        ) 
       ) 
      ) 
     ); 

     return new HttpResponseMessage() { Content = new StringContent(xdoc.ToString(), Encoding.UTF8, "application/xml") }; 
    } 

数据是从移动应用请求花费。移动应用程序发送c.StartDay例如像这样17-8-2017T10:8:3。在xml我需要显示它这样的yyyy-MM-ddTHH:mm:ss

我怎么能这样做的XML生成?

+0

但'c.StartDay'还可以' 17-12-2017T10:45:55'?=! –

+0

是的。你是对的@ MongZhu –

+0

它必须记录在'yyyy-MM-ddTHH:mm:ss' @MongZhu –

回答

3

你应该首先分析你得到一个DateTime字符串:

DateTime.ParseExact(c.StartDay,"d-M-yyyyTH:m:s", 
         CultureInfo.InvariantCulture) 

,然后在XML显示它您喜欢的方式:

.ToString("yyyy-MM-ddTHH:mm:ss") 

你可以做所有的在您选择的一个声明中:

var timeTables = db.TimeTables 
     .Where(c=> c.Today == today) 
     .Select(c => new 
     { 
      c.INN, 
      StartDay = DateTime.ParseExact(c.StartDay,"d-M-yyyyTH:m:s", 
              CultureInfo.InvariantCulture) 
           .ToString("yyyy-MM-ddTHH:mm:ss"), 
      c.StartPause, 
      c.EndPause, 
      c.EndDay 
     }).AsEnumerable(); 

UPDATE

由于LINQ到实体不支持这些类的方法,你可以在以后的XmlElement使用它:

new XElement("start", DateTime.ParseExact(w.StartDay,"d-M-yyyyTH:m:s", 
             CultureInfo.InvariantCulture) 
           .ToString("yyyy-MM-ddTHH:mm:ss")), 
+1

你只需要在你的日期字符串中使用单个's'就可以计算单个数字秒。 – Chris

+0

谢谢@Chris,编辑 –

+0

让这个'LINQ to Entities不能识别'System.String ToString(System.String)'方法,并且这个方法不能被转换成存储表达式。' –

0

试试这个:

w.StartDay.ToString("yyyy-MM-ddTHH:mm:ss"); 

或试试这个:

DateTime _latestDepartTime = DateTime.ParseExact(w.StartDay.ToString(), "yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture); 

下一个解决方案:

DateTimeOffset.ParseExact(w.StartDay.ToString(), "yyyy-MM-ddTHH:mm:ss", 
                 CultureInfo.InvariantCulture) 

希望它可以帮助

+0

不,这不是帮助 –

+0

现在@mark_spencer尝试,我已经编辑我的解决方案 – praguan

+0

但我不能在这种结构中使用 'XDOC VAR =新的XDocument( 新的XElement(“数据”, timeTables.Select (“start”,w.StartDay), 新的XElement(“暂停”,w.StartPause)(w => 新的XElement(“worker”, 新的XAttribute(“id”,w.INN), ) , 新的XElement(“continue”,w.EndPause), 新的XElement(“end”,w.EndDay) )' –

0

可以尝试

DateTime dt = DateTime.Parse("2017-12-17 10:45:55");