none
日期格式PHP Date("U") 轉換成ASP.NET 常用之日期格式? RRS feed

  • 問題

  •  

    版大您好:

    想請教,由mysql轉換資料到mssql,發現有個欄位是使用php date("U")所轉成的資料,

    想請教您,該如何將此種格式的日期轉換成ASP.NET常用的日期型態呢?謝謝

     

    例如:1156780800 轉成 2008/01/1

    2008年10月27日 上午 02:25

解答

  • 應該是 1199145600 才是 2008/01/01

    double offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).TotalHours;

    double timestamp = (new DateTime(2008,1,1)- new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds;

    DateTime dt = (new DateTime(1970, 1, 1, 0, 0, 0)).AddHours(offset).AddSeconds(timestamp);

    // dt.ToString("yyyy/MM/dd") -> 20008/01/01



    參考: 如何將unix timestamp轉換成DateTime

    2008年10月27日 上午 04:01

所有回覆

  • 根據
    http://tw.php.net/date

    date("U") 是 1970/1/1 00:00:00 UTC+0 到你的時間點經過的秒數

    1156780800 / 60 / 60 = 321328 (先換算成小時)
    321328 + 8  = 321336 (備註, 台北的時區為UTC+8)
    321336 / 24 = 13389 (再換算成天數)

    後面忘了怎麼算了

    1156780800 真的能轉成 2008/01/1 嗎?
    數字看起來怪怪的?
    因為就算把 13389 /365 所得出來的數字再加上1970年, 也比預期的差太多了, 恐不符閏年造成的誤差
    2008年10月27日 上午 02:46
  •  

    謝謝您的回覆~

    2008/01/01 是我想轉成這種格式啦...呵呵...不好意思...沒說明清楚....

    可否再請教一下,asp.net 有比較方便的函式可以來處理這個嗎?

    謝謝

    2008年10月27日 上午 02:53
  • Code Snippet

    int X = 1156780800;


            DateTime XDay = new DateTime(1970, 1, 1);

            XDay = XDay.AddDays(((X / 60 / 60) + 8) / 24);

           string strXDay = XDay.ToString("d");




    得到
    strXDay = "2006/8/29"

    這個是你要的嗎?
    2008年10月27日 上午 03:50
  • 直接用 AddSeconds 不是比較方便嗎?

     

    2008年10月27日 上午 03:55
  •  

    可請您解釋用法嗎? 謝謝
    2008年10月27日 上午 03:58
  •  心冷熱情熄 寫信:
    直接用 AddSeconds 不是比較方便嗎?

     



    有時區問題啊
    你不顧 UTC+8 了嗎?

    2008年10月27日 上午 03:59
  • 應該是 1199145600 才是 2008/01/01

    double offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).TotalHours;

    double timestamp = (new DateTime(2008,1,1)- new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds;

    DateTime dt = (new DateTime(1970, 1, 1, 0, 0, 0)).AddHours(offset).AddSeconds(timestamp);

    // dt.ToString("yyyy/MM/dd") -> 20008/01/01



    參考: 如何將unix timestamp轉換成DateTime

    2008年10月27日 上午 04:01
  • DateTime Timestamp2DateTime(int timestamp)
    {
        double offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).TotalHours;
        DateTime dt = ( new DateTime( 1970, 1, 1 ) ).AddHours( offset ).AddSeconds(timestamp);
        return dt;
    }

    這樣?

    2008年10月27日 上午 04:13
  • 包成 class的版本

    http://www.player.idv.tw/prog/index.php?title=DateTimeHelper

    大概這樣吧
    2008年10月27日 上午 04:47