我有这个字符串" 2014-10-20T10:46:00 + 01:00"但是无法弄清楚如何仅显示" 10:46"。我用它,但它给了我" 12:46":
dateTime.ToUniversalTime().ToString("HH:mm", CultureInfo.CurrentCulture);
答案 0 :(得分:2)
由于此字符串包含offset部分,您可能需要考虑将其解析为DateTimeOffset
而不是DateTime
。然后,您可以使用.DateTime
property。
可以在LINQPad;
中演示一种解决方案string s = "2014-10-20T10:46:00+01:00";
var dto = DateTimeOffset.Parse(s);
dto.DateTime.ToString("HH:mm").Dump(); // 10:46
当然,此字符串格式应由DateTimeFormatInfo
中的当前文化支持。
答案 1 :(得分:1)
使用ToLocalTime()
方法代替ToUniversal()
类型的DateTime
修改强>
仅使用dateTime.ToString("HH:mm");
怎么样?它应该给你你需要的东西......
我准备了一些代码来为您检查:
测试类看起来像这样:
[Serializable]
public class Test
{
[XmlAttribute]
public DateTime DateTime { get; set; }
}
序列化就是这样完成的。
var s = new XmlSerializer(typeof(Test));
using (XmlWriter x = new XmlTextWriter("test.xml", Encoding.UTF8))
{
s.Serialize(x, new Test { DateTime = DateTime.Parse("2014-10-20T10:46:00+01:00") });
}
using (var r = XmlReader.Create("test.xml"))
{
var o = (Test)s.Deserialize(r);
var result = o.DateTime.ToString("HH:mm");
}
result
是' 11:46'如你所料。
答案 2 :(得分:0)
问题是我将XML解析为DateTime属性。我的xml到达如下" 2014-10-20T10:46:00 + 01:00",但我需要显示11:46。它显示12:46。这是为什么?这是我的道具:
private DateTime dateTimeField;
...
[System.Xml.Serialization.XmlAttributeAttribute()]
public System.DateTime dateTime
{
get
{
return this.dateTimeField;
}
set
{
if ((dateTimeField.Equals(value) != true))
{
this.dateTimeField = value;
this.OnPropertyChanged("dateTime");
}
}
}