2017-08-17 16 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") 

あなたはすべてを行うことができます1つの声明であなたの選択中:

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

ハズレ@文字列ですが、それはない今してみてください@mark_spencer –

+0

を助け、私は私の解決策 – praguan

+0

を編集したしかし、私はこのような構成に 'VARのXDOC =新しいXDocument( 新しいXElementオブジェクト(「データ」、 timeTables.Selectを使用するカントnew XElement( "start"、w.StartDay)、 new XElement( "pause"、w.StartPause)新しいXElement( "worker"、 、XAttribute( "id"、w.INN)、 ) 、 新しいXElementオブジェクト( "継続"、w.EndPause)、 新しいのXElement( "終了"、w.EndDay) ) ' –

0

を役に立てば幸いあなたは

を試すことができます
DateTime dt = DateTime.Parse("2017-12-17 10:45:55"); 
関連する問題