DateTime格式混淆美国和欧洲

时间:2011-09-07 07:16:23

标签: c# xml datetime windows-phone-7

我有这种xml,其中1st jan和1st feb实际格式是dd.mm.yyyy。

<?xml version="1.0" encoding="utf-8"?>
<eventManager>
    <event>
        <name>brith day0</name>
        <place>home</place>
        <latitude>60.170133</latitude>
        <longitude>24.938428</longitude>
        <date>01.01.2011</date>
        <time>00:00</time>
        <img>birthday.jpg</img>
    </event>
    <event>
        <name>brith day0</name>
        <place>home</place>
        <latitude>60.170133</latitude>
        <longitude>24.938428</longitude>
        <date>01.02.2011</date>
        <time>23:00</time>
        <img>birthday1.jpg</img>
    </event>
</eventManager>

然后是一个名为event的类,它从上面的xml事件中获取所有数据。现在我的目的是检查两个日期是否相等。对于以下情况,这是事实。但根据上面的xml格式,它不是真的。

if (CompareSameMonth(EventList[0]._date, EventList[1]._date)) { }

bool CompareSameMonth(DateTime dt1, DateTime dt2) 
{ 
    bool same = false; 

    Debug.WriteLine("dt1.Month "+dt1.Month.ToString()); // output dt1.Month 1 
    Debug.WriteLine("dt2.Month "+dt2.Month.ToString()); // output dt2.Month 1

    if (dt1.Year == dt2.Year && dt1.Month == dt2.Month) 
        same = true; 

    return same; 
 } 

如何使用c#wp7问题解决这个问题?

添加更多信息我如何将XML添加到EventList: -

public void ParseXml(string content)         {

        m_XMLContent = XDocument.Parse(content);

        var data = from query in m_XMLContent.Descendants("event")
                   select new Event
                   {
                       name = (string)query.Element("name"),
                       place = (string)query.Element("place"),
                       latitude = (double)query.Element("latitude"),
                       longitude = (double)query.Element("longitude"),
                       _date = (DateTime)query.Element("date"),
                       _time = (DateTime)query.Element("time"),
                       imgLink = (string)query.Element("img")
                   };

       EventList.Sort(new DateTimeComparer());

    }

    public class DateTimeComparer : IComparer<Event>
    {
        public int Compare(Event x, Event y)
        {
            return x.date_time.CompareTo(y.date_time);
        }
    }

2 个答案:

答案 0 :(得分:4)

对于日期解析和比较,您必须使用CultureInfo对象 对于解析 - 美国或欧洲文化,比较 - Invariant culture

string s1 = "01.01.2011";
string s2 = "01.02.2011";
bool result;
CultureInfo culture = CultureInfo.CreateSpecificCulture("de-DE");
DateTimeStyles styles = DateTimeStyles.None;
DateTime dateOne;
DateTime dateTwo;

if (DateTime.TryParse(s1, culture, styles, out dateOne) && DateTime.TryParse(s2, culture, styles, out dateTwo))
{
    result = dateOne.Equals(dateTow);
}

答案 1 :(得分:0)

您应该尝试以UTC格式存储日期,以避免文化之间存在任何歧义......

<eventManager>
    <event>
        <name>brith day0</name>
        <place>home</place>
        <latitude>60.170133</latitude>
        <longitude>24.938428</longitude>
        <dateTime>2011-01-01T00:00:00.000Z</dateTime>

当然,假设您可以控制数据:)

如果没有,我建议您在开始对它们进行任何操作之前将本地化的日期时间转换为UTC。