2014-09-19 2 views
1

У меня есть эта строка «2014-10-20T10: 46: 00 + 01: 00», но не могу понять, как отображать только «10:46». Я использую это, но это дает мне "12:46":DateTime Объект получает время независимо от часового пояса

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

Очевидно, что важно, как вы преобразовали эту строку в «dateTime». Вы также должны опубликовать этот код. И укажите свой часовой пояс. –

+0

Отправленный. Мой часовой пояс - Болгария/София. –

ответ

1

Используйте ToLocalTime() метод вместо ToUniversal() из DateTime типа

Edit

Что об использовании только dateTime.ToString("HH:mm");? Это должно дать вам то, что вам нужно ...

Я подготовил код, чтобы проверить это для вас:

класс Test выглядит следующим образом:

[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

Поскольку эта строка содержит 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.

+0

Как здесь соотносится LinqPad? –

+0

@MattJohnson Я просто продемонстрировал этот код на LINQPad. Как вы можете видеть, я использовал метод 'Dump()' extension, поэтому я хочу упомянуть об этом. –

+1

Несомненно. Просто кажется посторонним. –

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"); 
      } 
     } 
    } 
Смежные вопросы