【问题标题】:DateTime Object get time regardless of the time zone无论时区如何,DateTime 对象都可以获取时间
【发布时间】:2014-11-14 00:58:11
【问题描述】:

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

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

【问题讨论】:

  • 很明显,您如何将该字符串转换为“dateTime”是相关的。您也需要发布该代码。并提及您的时区。
  • 已发布。我的时区是保加利亚/索非亚。

标签: c# date datetime time timezone


【解决方案1】:

由于此字符串包含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 中的当前文化应该支持这种字符串格式。

【讨论】:

  • LinqPad 在这里有何意义?
  • @MattJohnson 我刚刚在 LINQPad 上演示了这段代码。如您所见,我使用了Dump() 扩展方法,这就是我要提到它的原因。
  • 当然。只是看起来无关紧要。
【解决方案2】:

使用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”。

【讨论】:

    【解决方案3】:

    问题是我将 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");
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2010-10-01
      • 2021-10-21
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2011-12-19
      • 2012-10-07
      • 2011-05-05
      • 1970-01-01
      相关资源
      最近更新 更多