1

.NET Web サービスから次の形式で時間/期間を取得しています:PT12H30Mこれはどのように処理できますか?

以下は、Webサービスから取得しているXmlです

<a:Date>2013-01-09T00:00:00</a:Date> 
<a:StartTime>PT11H30M</a:StartTime> 
<a:EndTime>PT12H</a:EndTime> 

標準の C# DateTime 形式に変換したいだけです。誰でもこれで私を助けてもらえますか?

注:xmlを解析しました...そして今、両方の値を持っていますが、どのように変換するのですか?

4

2 に答える 2

1

私がコメントしたように、そのような時刻を指定するのは奇妙です (また、日付を日付/時刻として指定するのも奇妙です) が、Noda Timeは次のような期間を処理します。

LocalDateTimePattern dateTimePattern = LocalDateTimePattern.ExtendedIsoPattern;
LocalDateTime date = dateTimePattern.Parse(dateText).Value;

PeriodPattern pattern = PeriodPattern.RoundtripPattern;
Period startTime = pattern.Parse(startTimeText).Value;
Period endTime = pattern.Parse(endTimeText).Value;

LocalDateTime startDateTime = date + startTime;
LocalDateTime endDateTime = date + endTime;

本当に必要な場合は、後でそれをBCL 値に変換することもできDateTimeますが、もちろん、アプリ全体で Noda Time を使用することをお勧めします :)

于 2013-02-12T08:47:45.543 に答える
1

表記

<a:StartTime>PT11H30M</a:StartTime> 
<a:EndTime>PT12H</a:EndTime> 

datatypes.xsd で指定された dayTimeDuration (duration datatype に基づく) に対応します -明確にするためにここを見てください。

P = duration marker
nD = optional unsigned integer corresponding to number of days
T = date time separator
nH = number of hours

など - あなたはアイデアを得る:)

したがって、それを解析するには、以下の簡単で汚い例のようなことを行うことができます:

 var xmla = @"
<root xmlns:a=""a"">
<a:Date>2013-01-09T00:00:00</a:Date> 
<a:StartTime>PT11H30M</a:StartTime> 
<a:EndTime>PT12H</a:EndTime> 
</root>";
    var ns = new XmlNamespaceManager(new NameTable());
    ns.AddNamespace("a", "a");
    var ele = XElement.Parse(xmla);
    var start = ele.XPathSelectElement("//a:StartTime", ns);
    var end = ele.XPathSelectElement("//a:EndTime", ns);
    var startTime = XmlConvert.ToTimeSpan(start.Value);
    var endTime = XmlConvert.ToTimeSpan(end.Value);
    var date = ele.XPathSelectElement("//a:Date", ns);
    var dateTime = XmlConvert.ToDateTime(date.Value, XmlDateTimeSerializationMode.RoundtripKind);

    Console.WriteLine("Ran at {0} for a duration of  {1}", dateTime + startTime, endTime - startTime);
于 2013-02-12T09:06:54.490 に答える