我有这个字符串"2014-10-20T10:46:00+01:00",但不知道如何只显示"10:46"。我用这个,但它给了我"12:46":
dateTime.ToUniversalTime().ToString("HH:mm", CultureInfo.CurrentCulture);
由于此字符串有偏移部分,您可能需要考虑将其解析为DateTimeOffset
而不是DateTime
。然后可以使用.DateTime
属性。
一种解决方案可以在LINQPad中演示;
string s = "2014-10-20T10:46:00+01:00";
var dto = DateTimeOffset.Parse(s);
dto.DateTime.ToString("HH:mm").Dump(); // 10:46
当然,DateTimeFormatInfo
中当前的区域性应该支持这种字符串格式。
使用ToLocalTime()
方法而不是DateTime
类型的ToUniversal()
编辑
只使用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"。
问题是我将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");
}
}
}