无论时区如何,DateTime对象都会获得时间

时间:2014-09-19 12:18:34

标签: c# date datetime time timezone

我有这个字符串" 2014-10-20T10:46:00 + 01:00"但是无法弄清楚如何仅显示" 10:46"。我用它,但它给了我" 12:46":

dateTime.ToUniversalTime().ToString("HH:mm", CultureInfo.CurrentCulture);

3 个答案:

答案 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");
            }
        }
    }