2011-09-07 96 views
1

我有这种xml其中第一个1月和第一个feb是其实格式意味着dd.mm.yyyy。DateTime格式混淆美国和欧洲

<?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: -

公共无效ParseXml(字符串内容) {

 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

不可能帮助你,因为我们不知道你是如何从XML到'EventList'以及'i'和'j'包含什么值的。 –

+0

更多信息添加到XML到EventList。我和j是不分我的问题只是在循环中的2个数组元素。 – masiboo

回答

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。

+0

这是ISO 8601(但我认为你想要...... T00:00:00.000Z)。 –

+0

是错过了几个零!编辑.. – MattDavey

4

对于日期的解析和comparsion你必须使用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); 
} 
+0

@Filburt谢谢。 – VMAtm

+0

看到OP我猜想如何比较实际日期的例子会派上用场。 – Filburt

相关问题