`
qqdenghaigui
  • 浏览: 120429 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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.

分享到:
评论

相关推荐

    基于ErlangC函数的Oracle性能预测和分析.pdf

    Erlang C 函数是一种经典的呼叫中心模型,常用于预测在一定并发用户数下系统的性能,如响应时间和服务质量。在本文中,作者将Erlang C函数应用于Oracle数据库性能预测,为数据库管理员提供了有效评估和优化数据库...

    erlang_版本24.3.4.4

    这个过程可能需要一些时间,因为它会编译整个Erlang虚拟机和标准库。编译完成后,你可以通过运行`make tests`来验证Erlang的正确性。 5. **安装**:最后,使用`make install`将编译好的Erlang二进制文件安装到你的...

    windows下安装Erlang环境

    **函数式编程**:Erlang是一种函数式语言,函数无副作用,强调纯函数和不可变数据,这有助于编写简洁、可预测的代码。 **动态类型**:Erlang是动态类型的,变量的类型在运行时确定,提供了灵活性。 **及早求值或...

    KMP(Erlang)代码实现

    Erlang的函数式编程特性以及对模式匹配的支持,为实现KMP算法提供了便利。 在给定的文件内容中,通过Erlang语言实现了KMP算法,以下是从文件内容中提取的关键知识点: 1. kmp_search/2函数:这是KMP算法的主函数,...

    两本erlang电子书

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和实时系统。...无论是为了个人兴趣还是职业发展,投入时间学习Erlang都将是一次富有成效的旅程。

    Erlang官网下载过慢

    Erlang是一种面向并发的、函数式编程语言,主要用于构建高度可扩展的、容错性强的分布式系统。在IT行业中,Erlang因其强大的实时性和处理大量并发连接的能力而被广泛应用于电信、互联网基础设施和实时系统。RabbitMQ...

    erlang的timer和实现机制

    在Erlang中,`timer`模块是用于处理延时操作和定时任务的关键工具,它提供了丰富的功能,使得开发者能够优雅地处理时间相关的逻辑。 首先,`timer`模块的主要函数包括`tc/1,2,3`(测试调用)、`send_after/3,4`...

    用matlab产生 erlang分布的随机数,两种方法

    Erlang分布是一种连续概率分布,常用于描述一系列独立同分布的指数随机变量之和,例如呼叫中心等待时间、服务时间等。在MATLAB中,我们可以利用不同的函数或技巧来生成服从Erlang分布的随机数。以下是两种常用的方法...

    Erlang 环境 opt_win64_21.1版本

    - 软实时性:Erlang提供了一种处理时间延迟和错误的机制,能够在出现硬件故障或网络问题时仍保持服务的连续性。 - 无缝分布式:Erlang系统可以在多台机器上分布运行,进程间通信高效且透明。 - 自动内存管理:Erlang...

    二郎助手erlang开发工具、erlang编辑器

    2. **代码自动完成**:智能感知功能能根据输入的字符自动提供可能的函数或变量名,节省了大量键入时间。 3. **错误检查**:实时的语法和逻辑错误检查,让问题在编写代码时就能被发现,而不是在运行时。 4. **调试...

    Erlang.ppt

    在实时性方面,Erlang支持软实时特性,意味着它能够处理那些对响应时间有严格要求但并非绝对必须的系统。这种灵活性使得Erlang在处理电信网络中不断变化的工作负载时表现优秀。 对于硬件交互,Erlang提供了一个抽象...

    erlang 20.3.zip

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和实时系统。Erlang因其在处理大量并发连接和容错能力上的优秀表现,尤其在电信、银行、互联网服务等领域得到...

    Concurrent Programming in ERLANG (P1-90)

    Erlang提供了丰富的内置函数,这些函数覆盖了从简单的数值计算到复杂的数据结构操作的各种功能。掌握这些内置函数对于高效地编写Erlang程序至关重要。 **1.5 并发** 并发是Erlang最引人注目的特性之一。Erlang的...

    erlang 21.3

    Erlang是一种面向并发的、动态类型的编程语言,主要用于构建高度可扩展的、容错性强的...在开发过程中,熟练掌握Erlang的并发模型、模式匹配、函数式编程理念以及OTP框架,将有助于构建出高效、可靠的分布式系统。

    Erlang Programming 导读.pdf

    - **编程范式**: Erlang 是一种函数式编程语言,强调函数调用和不可变状态;而 C 语言是一种过程式编程语言,支持指针操作和可变状态。 - **并发模型**: Erlang 通过轻量级进程 (lightweight processes) 实现高并发...

    英雄远征erlang源码

    Erlang是一种并发性极强、容错性好的函数式编程语言,常用于构建高可用性的分布式系统,尤其在实时通信和大规模并发场景下表现优异。 【描述】:“英雄远征服务器端erlang源码,用mysql数据库”意味着该源码中包含了...

    Erlang C计算公式 .pdf

    了解并掌握Erlang C计算公式对于呼叫中心的运营管理至关重要,它可以帮助企业有效地预测和应对不同时间段的呼叫流量波动,确保提供高效且高质量的客户服务。对于那些希望在呼叫中心领域深化理解和提升效率的专业人士...

    programming erlang src code

    《编程Erlang》是Joe Armstrong所著的一本经典书籍,深入浅出地介绍了Erlang这门函数式编程语言,以及它在并发和分布式系统中的应用。源码分析可以帮助我们更深入地理解Erlang的内在机制和设计哲学。 Erlang是一种...

Global site tag (gtag.js) - Google Analytics