2011-09-07 95 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

相關問題