erlang 时间函数

erlang:now转本地时间

15> calendar:now_to_local_time(erlang:now()).

{{2012,5,17},{14,32,6}}

 

erlang:now转世界时间

16> calendar:now_to_universal_time(erlang:now()).

{{2012,5,17},{6,33,2}}

17>

  

验证合法的日期

20> calendar:valid_date({0,0,0}).

false

21> calendar:valid_date({0,1,0}).

false

22> calendar:valid_date({0,1,1}).

true

26> calendar:valid_date(90,1,10). 

true 

  

获得本地时间 年 月 日小时 分 秒

1>  {{Year,Month,Day},{Hour,Min,Second}}=calendar:local_time().

{{2012,5,17},{14,13,14}}

2> b().

Day = 17

Hour = 14

Min = 13

Month = 5

Second = 14

Year = 2012

ok

 

获得世界时间

3> calendar:universal_time().

{{2012,5,17},{6,16,27}}

 

本地时间转换到世界时间

10> calendar:local_time_to_universal_time_dst({{2012,3,12},{3,23,12}}).

[{{2012,3,11},{19,23,12}}]

11> calendar:local_time_to_universal_time_dst({{2012,3,12},{4,23,12}}).

[{{2012,3,11},{20,23,12}}]

12> calendar:local_time_to_universal_time_dst({{2012,3,12},{5,23,12}}).

[{{2012,3,11},{21,23,12}}]

13>  calendar:local_time_to_universal_time_dst({{2012,3,12},{15,23,12}}).

[{{2012,3,12},{7,23,12}}]

14>  calendar:local_time_to_universal_time_dst({{2012,3,12},{16,23,12}}).

[{{2012,3,12},{8,23,12}}]

 

世界时间转本地时间

12> calendar:universal_time_to_local_time({{2012,3,12},{3,23,12}}).

{{2012,3,12},{11,23,12}}

13> calendar:universal_time_to_local_time({{2012,3,12},{5,23,12}}).

{{2012,3,12},{13,23,12}}

14> calendar:universal_time_to_local_time({{2012,3,12},{20,23,12}}).

{{2012,3,13},{4,23,12}}

 

计算是星期几

13> calendar:day_of_the_week(1984,5,15).

2

14> calendar:day_of_the_week(2012,5,17).

4

 

计算是否闰年

5> calendar:is_leap_year(1990).

false

6> calendar:is_leap_year(2000).

true

 

计算某年某月有多少天

7> calendar:last_day_of_the_month(2000,2).

29

8> calendar:last_day_of_the_month(2000,3).

31

9> calendar:last_day_of_the_month(1990,2).

28

 

秒转时间

4> calendar:now_to_datetime(erlang:now()).     

{{2012,5,17},{5,41,24}}

5> calendar:seconds_to_daystime(87400).  

{1,{0,16,40}}

6> calendar:seconds_to_daystime(97400).

{1,{3,3,20}}

7> calendar:seconds_to_daystime(80400).

{0,{22,20,0}}

如果没有超过一天可以使用

8> calendar:seconds_to_time(80400).    

{22,20,0}

9> calendar:seconds_to_time(86400).   

** exception error: no function clause matching calendar:seconds_to_time(86400) (calendar.erl, line 357)

 

 

时间转到秒

10> calendar:time_to_seconds({22,20,0}).

80400

11> calendar:time_to_seconds({1,{22,20,0}}).

** exception error: no function clause matching calendar:time_to_seconds({1,{22,20,0}}) (calendar.erl, line 390)

  

计算Unix Timestamp

timestamp() ->

    calendar:datetime_to_gregorian_seconds(erlang:universaltime()).

或者:

timestamp() ->

    {M, S, _} = erlang:now(),  

    M * 1000000 + S.

 

 

日期时间格式化

16> test:now_to_local_string(erlang:now()).

"2012-05-17T16:14:42.195510+08:00"

17> test:now_to_utc_string(erlang:now()). 

"2012-05-17T08:15:26.907466Z"

18> test:timestamp_to_iso(calendar:local_time()).

"20120517T16:27:18"

下面的代码实现上面的时间格式化效果:

复制代码

timestamp_to_iso({{Year, Month, Day}, {Hour, Minute, Second}}) ->

    lists:flatten(

      io_lib:format("~4..0w~2..0w~2..0wT~2..0w:~2..0w:~2..0w",

            [Year, Month, Day, Hour, Minute, Second])).

 

 

now_to_utc_string({MegaSecs, Secs, MicroSecs}) ->

    {{Year, Month, Day}, {Hour, Minute, Second}} =

    calendar:now_to_universal_time({MegaSecs, Secs, MicroSecs}),

    lists:flatten(

      io_lib:format("~4..0w-~2..0w-~2..0wT~2..0w:~2..0w:~2..0w.~6..0wZ",

            [Year, Month, Day, Hour, Minute, Second, MicroSecs])).

 

now_to_local_string({MegaSecs, Secs, MicroSecs}) ->

    LocalTime = calendar:now_to_local_time({MegaSecs, Secs, MicroSecs}),

    UTCTime = calendar:now_to_universal_time({MegaSecs, Secs, MicroSecs}),

    Seconds = calendar:datetime_to_gregorian_seconds(LocalTime) -

            calendar:datetime_to_gregorian_seconds(UTCTime),

    {{H, M, _}, Sign} = if

                Seconds < 0 ->

                {calendar:seconds_to_time(-Seconds), "-"};

                true ->

                {calendar:seconds_to_time(Seconds), "+"}

    end,

    {{Year, Month, Day}, {Hour, Minute, Second}} = LocalTime,

    lists:flatten(

      io_lib:format("~4..0w-~2..0w-~2..0wT~2..0w:~2..0w:~2..0w.~6..0w~s~2..0w:~2..0w",

            [Year, Month, Day, Hour, Minute, Second, MicroSecs, Sign, H, M])).

 

 

% yyyy-mm-ddThh:mm:ss[.sss]{Z|{+|-}hh:mm} -> {MegaSecs, Secs, MicroSecs}

datetime_string_to_timestamp(TimeStr) ->

    case catch parse_datetime(TimeStr) of

    {'EXIT', _Err} ->

        undefined;

    TimeStamp ->

        TimeStamp

    end.

 

parse_datetime(TimeStr) ->

    [Date, Time] = string:tokens(TimeStr, "T"),

    D = parse_date(Date),

    {T, MS, TZH, TZM} = parse_time(Time),

    S = calendar:datetime_to_gregorian_seconds({D, T}),

    S1 = calendar:datetime_to_gregorian_seconds({{1970, 1, 1}, {0, 0, 0}}),

    Seconds = (S - S1) - TZH * 60 * 60 - TZM * 60,

    {Seconds div 1000000, Seconds rem 1000000, MS}.

 

% yyyy-mm-dd

parse_date(Date) ->

    [Y, M, D] = string:tokens(Date, "-"),

    Date1 = {list_to_integer(Y), list_to_integer(M), list_to_integer(D)},

    case calendar:valid_date(Date1) of

    true ->

        Date1;

    _ ->

        false

    end.

 

% hh:mm:ss[.sss]TZD

parse_time(Time) ->

    case string:str(Time, "Z") of

    0 ->

        parse_time_with_timezone(Time);

    _ ->

        [T | _] = string:tokens(Time, "Z"),

        {TT, MS} = parse_time1(T),

        {TT, MS, 0, 0}

    end.

 

parse_time_with_timezone(Time) ->

    case string:str(Time, "+") of

    0 ->

        case string:str(Time, "-") of

        0 ->

            false;

        _ ->

            parse_time_with_timezone(Time, "-")

        end;

    _ ->

        parse_time_with_timezone(Time, "+")

    end.

 

parse_time_with_timezone(Time, Delim) ->

    [T, TZ] = string:tokens(Time, Delim),

    {TZH, TZM} = parse_timezone(TZ),

    {TT, MS} = parse_time1(T),

    case Delim of

    "-" ->

        {TT, MS, -TZH, -TZM};

    "+" ->

        {TT, MS, TZH, TZM}

    end.

 

parse_timezone(TZ) ->

    [H, M] = string:tokens(TZ, ":"),

    {[H1, M1], true} = check_list([{H, 12}, {M, 60}]),

    {H1, M1}.

 

parse_time1(Time) ->

    [HMS | T] =  string:tokens(Time, "."),

    MS = case T of

         [] ->

         0;

         [Val] ->

         list_to_integer(string:left(Val, 6, $0))

     end,

    [H, M, S] = string:tokens(HMS, ":"),

    {[H1, M1, S1], true} = check_list([{H, 24}, {M, 60}, {S, 60}]),

    {{H1, M1, S1}, MS}.

 

check_list(List) ->

    lists:mapfoldl(

      fun({L, N}, B)->

      V = list_to_integer(L),

      if

          (V >= 0) and (V =< N) ->

          {V, B};

          true ->

          {false, false}

      end

      end, true, List).

复制代码

 

 

构造日期字符串

 

 

复制代码

% a function to format date/time properly (e.g. 09 instead of 9)

return_2columns(X) ->

    case length(X) of

        1 ->

            "0" ++ X;

        _ ->

            X

    end.

 

%%% 显然这里可以直接使用 io_lib:format("~2..0B", [X])

 

% returns date/time as a properly formatted string (e.g. "01-01-2000 12:12:12")

get_current_time() ->

    {{Y, M, D}, {H, Mi, S}} = calendar:local_time(),

    L = lists:map(fun(X) -> 

                          X2=integer_to_list(X), 

                          return_2columns(X2) 

                  end, 

                  [Y, M, D, H, Mi, S]

                 ),

    [Y2, M2, D2, H2, Mi2, S2] = L,

    Y2 ++ "-" ++ M2 ++ "-" ++ D2 ++ " " ++ H2 ++ ":" ++ Mi2 ++ ":" ++ S2.

复制代码

 当然下面的代码段也很有可能被用到:

 

 

复制代码

day(1) -> "Mon";

day(2) -> "Tue";

day(3) -> "Wed";

day(4) -> "Thu";

day(5) -> "Fri";

day(6) -> "Sat";

day(7) -> "Sun".

 

month_to_list(1)  -> "Jan";

month_to_list(2)  -> "Feb";

month_to_list(3)  -> "Mar";

month_to_list(4)  -> "Apr";

month_to_list(5)  -> "May";

month_to_list(6)  -> "Jun";

month_to_list(7)  -> "Jul";

month_to_list(8)  -> "Aug";

month_to_list(9)  -> "Sep";

month_to_list(10) -> "Oct";

month_to_list(11) -> "Nov";

month_to_list(12) -> "Dec".

 

list_to_month("Jan") -> 1;

list_to_month("Feb") -> 2;

list_to_month("Mar") -> 3;

list_to_month("Apr") -> 4;

list_to_month("May") -> 5;

list_to_month("Jun") -> 6;

list_to_month("Jul") -> 7;

list_to_month("Aug") -> 8;

list_to_month("Sep") -> 9;

list_to_month("Oct") -> 10;

list_to_month("Nov") -> 11;

list_to_month("Dec") -> 12.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值