Go語言time包的練習及封裝

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。把time包相關的函數用法過了下,基本包含大部份常見的用法了.
並封裝了下日期顯示格式定製及time.Time數組排序的功能.以便以後調用.

保留下測試所用例子:     

package main //author:xcl//2014-1-14import ("fmt""time"    "github.com/xclpkg/utils"    "sort")func main(){    t := time.Now();    //alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';    //select to_date('2014-06-09 18:04:06','yyyy-MM-dd HH24:mi:ss') as dt from dual;    fmt.Println("\n示範時間 => ",utils.GetTmShortStr(t,"y-m-d H:i:s a"))    //返回當前是一年中的第幾天    //select to_char(sysdate,'ddd'),sysdate from dual;    yd := t.YearDay();    fmt.Println("一年中的第幾天: ",yd)           //一年中的第幾周    year,week := t.ISOWeek()    fmt.Println("一年中的第幾周: ",year," | ",week)           //當前是周幾    //select to_char(sysdate,'day') from dual;    //select to_char(sysdate,'day','NLS_DATE_LANGUAGE = American') from dual;       fmt.Println("當前是周幾: ",t.Weekday().String())    //字串轉成time.Time    //alter session set nls_date_format='yyyy-mm-dd hh:mi:ss';    //select to_date('14-06-09 6:04:06','yy-MM-dd hh:mi:ss') as dt from dual;        tt,er := time.Parse(utils.GoStdTime(),"2014-06-09 16:04:06")    if(er != nil){        fmt.Println("字串轉時間: parse error!")    }else{        fmt.Println("字串轉時間: ",tt.String())    }    fmt.Println("\n示範時間 => ",utils.GetTmStr(t,"y-m-d h:i:s"))       ta := t.AddDate(1,0,0)       fmt.Println("增加一年 => ",utils.GetTmStr(ta,"y-m-d"))     ta = t.AddDate(0,1,0)    fmt.Println("增加一月 => ",utils.GetTmStr(ta,"y-m-d"))    //select sysdate,sysdate + interval '1' day from dual;    ta = t.AddDate(0,0,1) //18    fmt.Println("增加一天 => ",utils.GetTmStr(ta,"y-m-d"))    durdm,_ := time.ParseDuration("432h")    ta = t.Add(durdm)    fmt.Println("增加18天(18*24=432h) => ",utils.GetTmStr(ta,"y-m-d"))     //select sysdate,sysdate - interval '7' hour from dual;    dur,_ := time.ParseDuration("-2h")    ta = t.Add(dur)    fmt.Println("減去二小時 => ",utils.GetTmStr(ta,"y-m-d h:i:s"))    //select sysdate,sysdate - interval '7' MINUTE from dual;    durmi,_ := time.ParseDuration("-7m")    ta = t.Add(durmi)    fmt.Println("減去7分鐘 => ",utils.GetTmStr(ta,"y-m-d h:i:s"))    //select sysdate,sysdate - interval '10' second from dual;    durs,_ := time.ParseDuration("-10s")    ta = t.Add(durs)    fmt.Println("減去10秒 => ",utils.GetTmStr(ta,"y-m-d h:i:s"))    ttr,er := time.Parse(utils.GoStdTime(),"2014-06-09 16:58:06")    if(er != nil){        fmt.Println("字串轉時間: 轉換失敗!")    }else{        fmt.Println("字串轉時間: ",ttr.String())    }    //alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';    //select trunc(to_date('2014-06-09 16:58:06','yyyy-mm-dd hh24:mi:ss'),'mi') as dt from dual;     // SQL => 2014-06-09 16:58:00    // Truncate =>  2014-06-09 16:50:00    durtr,_ := time.ParseDuration("10m")    ta = ttr.Truncate(durtr)    fmt.Println("Truncate => ",utils.GetTmStr(ta,"y-m-d H:i:s"))    //select round(to_date('2014-06-09 16:58:06','yyyy-mm-dd hh24:mi:ss'),'mi') as dt from dual;     // SQL => 2014-06-09 16:58:00    // Round =>  2014-06-09 17:00:00    ta = ttr.Round(durtr)    fmt.Println("Round => ",utils.GetTmStr(ta,"y-m-d H:i:s"))    //日期比較    tar1,_ := time.Parse(utils.GoStdTime(),"2014-06-09 19:38:36")    tar2,_ := time.Parse(utils.GoStdTime(),"2015-01-14 17:08:26")    if tar1.After(tar2) {        fmt.Println("tar1 > tar2")    }else if tar1.Before(tar2) {        fmt.Println("tar1 < tar2")    }else{        fmt.Println("tar1 = tar2")    }    tar3,_ := time.Parse(utils.GoStdTime(),"2000-07-19 15:58:16")    //日期列表中最晚日期    // select greatest('2014-06-09','2015-01-14','2000-07-19') from dual;        var arr utils.TimeSlice    arr = []time.Time{tar1,tar2,tar3}    temp := utils.Greatest(arr)    fmt.Println("日期列表中最晚日期 => ",utils.GetTmStr(temp,"y-m-d"))        //日期數組從早至晚排序    fmt.Println("\n日期數組從早至晚排序")    sort.Sort(arr)    for _,at := range arr {         fmt.Println("Sort => ",utils.GetTmStr(at,"y-m-d H:i:s"))    }}

      AddDate與ParseDuration有個區別需要注意:
             在AddDate中各位置是獨立的.既在對應位置的更改,不會影響其它位置的值,如日期add超過月底(30/31),月份不會自動增加,而日期則會變更為01.
             但ParseDuration則不同,是針對整個time.Time的變更.

       例子中將Oracle相關功能的SQL實現,也簡單的附註了下.日期時間處理其實蠻複雜的,

查查Oracle的Date和Timestamp相關知識就知道要考慮多少東西了.

time包能封裝的這麼簡潔真不容易.

         我自己封裝的包放在此: github


MAIL: xcl_168@aliyun.com

BLOG:http://blog.csdn.net/xcl168



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.