DateTime对象获取时间,而不考虑时区

本文关键字:不考虑 时区 取时间 对象 获取 DateTime | 更新日期: 2023-09-27 18:23:47

我有这个字符串"2014-10-20T10:46:00+01:00",但不知道如何只显示"10:46"。我用这个,但它给了我"12:46":

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

DateTime对象获取时间,而不考虑时区

由于此字符串有偏移部分,您可能需要考虑将其解析为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");
            }
        }
    }