none
有關日期比較 RRS feed

  • 問題

  • 想請教各位有關因日期比較的問題

    一般的作法都是將輸入的字串轉換為日期格式 再用DateTime.Compare方法來比較

    但因為有時輸入時,不知年或月、日時,規則是用99來表示

    ex:2010/99/06 ->不知月 

        9999/10/10->不知年

        2010/05/99->不知日

    如此在這樣的情況下,我要如何作比較?取得最小的日期

    比較的規則是 若遇到99的就不比

    以上面範例 2010/05/99< 2010/99/06< 9999/10/10

    所以取得的日期就是 2010/05/99

    但因為在轉型成日期格式時,就會失敗了…

    所以想請問各位有什麼樣的解決方式?

    2010年10月19日 上午 02:41

所有回覆

  • 有非正確日期當然不能轉日期格式

    那就用大力煉鋼法吧 利用SubString切字串

    先取出所有的年->比較所有的年->取最小年

    用最小年取出所有的月->比較所有的月->取最小月

    用最小月取出所有的日->比較所有的日->取最小日

    這樣子就可以知道最小的年、月、日

    然後再把它組起來吧

     

    或是直接取代99為最大值

    年的部分取代為9999

    月的部分取代為12

    日的部分取代為29、30、31 (依月份不同)

    然後就可以轉成正確日期格是再下去比大小

    2010年10月19日 上午 03:04
  • 你的問題可以透過運算子重載來處理.
    先設計一個類別來儲存你的日期結構
    class MyDate
    {
    int ? Year;
    int ? Month;
    int ? Day;
    }
    你也可以撰寫一些建構式來接受你的參數.

    然後複寫你要的運算子.譬如說<=,>=,>,<,==等等.
    最後複寫ToString()方法輸出你要的格式.

    所以程式就能如下處理了
    MyDate d1 = new MyDate("2010/05/99");
    MyDate d2 = new MyDate("2010/99/06");

    if(d1 >= d2)
    {
    string s = d1.ToString();
    }

    • 已提議為解答 程湘之間 2010年10月19日 上午 04:12
    2010年10月19日 上午 03:07
  • 你的問題可以透過運算子重載來處理.
    先設計一個類別來儲存你的日期結構
    class MyDate
    {
    int ? Year;
    int ? Month;
    int ? Day;
    }
    你也可以撰寫一些建構式來接受你的參數.

    然後複寫你要的運算子.譬如說<=,>=,>,<,==等等.
    最後複寫ToString()方法輸出你要的格式.

    所以程式就能如下處理了
    MyDate d1 = new MyDate("2010/05/99");
    MyDate d2 = new MyDate("2010/99/06");

    if(d1 >= d2)
    {
    string s = d1.ToString();
    }


    抱歉,詢問一下,寫了一個class,但d1>=d2 為什麼可以這樣比較?

    還是說要自己在class中定義比較的方法?

    2010年10月19日 上午 08:29
  • dear,

    試著把日期轉成tick,數字小的日期越近

          DateTime dt = DateTime.Now;
          long tick = dt.Ticks;
    


    秘訣無它,唯勤而已
    2010年10月19日 上午 09:06
  • 抱歉,詢問一下,寫了一個class,但d1>=d2 為什麼可以這樣比較?
    還是說要自己在class中定義比較的方法?

    這是dotNet語言中運算子重載的功能,你可以透過這個功能重載一些特定的運算子,當然比較方式還是要自己處理.

     

    2010年10月19日 下午 11:35
  • 我習慣不知道的日期欄位一律用 1 來處理,時間欄位用 0 來處理,然後仍然用 DateTime 來比較。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年10月20日 下午 03:38