2013-02-12 110 views
1

我以这种格式从.NET Web服务获取时间/持续时间:PT12H30M这怎么处理?来自.NET Web服务的时间/持续时间格式`PT12H30M`

下面是我的xml web服务从

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

让我我只是想将其转换为标准的C#DateTime格式。有谁能帮我解决这个问题吗?

注:我已经解析了xml ...现在我有两个值,但如何转换?

+0

很奇怪指定*时间作为一个像这样的时期...... – 2013-02-12 08:44:08

+0

嗨jon,有人创建了服务,我只是有权使用它。我无法更改Web服务。你有这个解决方案吗? – PaRsH 2013-02-12 08:49:36

回答

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值之后,如果你真的想,但是我建议你只使用野田佳彦时间在你的应用程序,当然:)

1

记号

的3210

对应于datatypes.xsd中指定的dayTimeDuration(基于持续时间dataype) - 请看清单here

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);