timex, Elixir项目的完整日期/时间库

分享于 

10分钟阅读

GitHub

  繁體 雙語
A complete date/time library for Elixir projects.
  • 源代码名称:timex
  • 源代码网址:http://www.github.com/bitwalker/timex
  • timex源代码文档
  • timex源代码下载
  • Git URL:
    git://www.github.com/bitwalker/timex.git
    Git Clone代码到本地:
    git clone http://www.github.com/bitwalker/timex
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/bitwalker/timex
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    Timex

    MasterHex.pm VersionInchCICoverage Status

    是一个丰富。全面的日期/时间库,用于药药项目,通过 :tzdata 包完全支持时区。 如果你需要操作日期。时间。datetimes。时间戳。等等,那么Timex就适合你 ! 它很容易使用类型来代替默认的Erlang类型,以及通过 timex_ecto 包的Ecto类型。

    Timex的完整文档是在这里找到的。

    迁移到 Timex-3。x

    详细信息请参见迁移部分。 如果你从早于 2的. x, 迁移,请查看这个迁移文档,以获取 1.x 到 2.x的迁移。

    Timex是一个重大重写,为了适应语义正确的Calendar新历法类型。 外部API大多是相同的,但是有更改,很多没有 deprecations,请仔细阅读更新日志。

    正在启动

    关于下面使用的一些简单示例,但是我强烈建议你查看API文档 ,这里有许多示例,例如自定义格式化程序/解析器等特定主题的文件。

    向你的项目添加 Timex

    要在项目中使用 Timex,请编辑 mix.exs 文件并将它的添加为依赖项:

    defpdepsdo [{:timex, "~> 3.1"}]enddefpapplicationdo [applications: [:timex]]end

    Quickfast简介

    我建议你将 use Timex 添加到 MODULE的顶部,这是别名公共类型,所以你可以更轻松地使用它们。 如果要查看添加的特定别名,请在 __using__/1 宏定义中检查 Timex MODULE的顶部。

    下面是几个简单的例子:

    >useTimex>Timex.today~D[2016-02-29]> datetime =Timex.now#<DateTime(2016-02-29T12:30:30.120+00:00Z Etc/UTC)>Timex.now("America/Chicago")#<DateTime(2016-02-29T06:30:30.120-06:00 America/Chicago)>Duration.now#<Duration(P46Y6M24DT21H57M33.977711S)>> {:ok, default_str} =Timex.format(datetime, "{ISO:Extended}")
    {:ok, "2016-02-29T12:30:30.120+00:00"}> {:ok, relative_str} =Timex.shift(datetime, minutes:-3) |>Timex.format("{relative}", :relative)
    {:ok, "3 minutes ago"}> strftime_str =Timex.format!(datetime, "%FT%T%:z", :strftime)"2016-02-29T12:30:30+00:00">Timex.parse(default_str, "{ISO:Extended}")
    {:ok, #<DateTime(2016-02-29T12:30:30.120+00:00 Etc/Utc)}>Timex.parse!(strftime_str, "%FT%T%:z", :strftime)#<DateTime(2016-02-29T12:30:30.120+00:00 Etc/Utc)>Duration.diff(Duration.now, Duration.zero, :days)16850>Timex.shift(date, days:3)~D[2016-03-03]>Timex.shift(datetime, hours:2, minutes:13)#<DateTime(2016-02-29T14:43:30.120Z Etc/UTC)>> timezone =Timezone.get("America/Chicago", Timex.now)#<TimezoneInfo(America/Chicago - CDT (-06:00:00))>>Timezone.convert(datetime, timezone)#<DateTime(2016-02-29T06:30:30.120-06:00 America/Chicago)>>Timex.before?(Timex.today, Timex.shift(Timex.today, days:1))true>Timex.before?(Timex.shift(Timex.today, days:1), Timex.today)false> interval =Timex.Interval.new(from:~D[2016-03-03], until: [days:3])
    %Timex.Interval{from:~N[2016-03-03 00:00:00], left_open:false,
     right_open:true, step: [days:1], until:~N[2016-03-06 00:00:00]}>~D[2016-03-04]in intervaltrue>~N[2016-03-04 00:00:00]in intervaltrue>~N[2016-03-02 00:00:00]in intervalfalse>Timex.Interval.overlaps?(Timex.Interval.new(from:~D[2016-03-04], until: [days:1]), interval)true>Timex.Interval.overlaps?(Timex.Interval.new(from:~D[2016-03-07], until: [days:1]), interval)false

    有大量它的他函数,所有它的他功能都与 Erlang DateTime元组。日期。NaiveDateTime和DateTime一起工作。 持续时间 MODULE 包含处理持续时间的函数,包括Erlang时间戳( 例如从 :timer.tc 返回的时间戳)

    插件可扩展性

    Timex为你公开了许多扩展点,以适应不同的用例:

    Timex本身定义了在日期。日期日期和NaiveDateTime类型上使用 Timex.Protocol 协议的核心操作。 从那里,所有其他的Timex功能都。 如果你想要使用自定义日期/日期时间类型,这是你需要实现的协议。

    Timex还定义了 Timex.Comparable 协议,你可以扩展它来添加与定制日期/日期时间类型。

    通过实现 Timex.Format.DateTime.Formatter 和/或者 Timex.Parse.DateTime.Parser 行为,你可以为日期时间字符串提供自己的格式化程序/解析器,具体取决于你的。

    常见问题

    警告: 表单 iso_*的Timex函数基于ISO日历表示日期/时间的方式,而不是ISO8601日期格式。 这种混乱以前发生过,注意这一点很重要 !

    • 如果需要在escript中使用 Timex,请添加 {:tzdata,"~> 0.1.8", override: true} 对于你的,更近的版本:tzdata无法在escript中工作,因为需要从,加载,文件。

    自动时区更新

    Timex包括用于时区数据的Tzdata 库。 Tzdata有自动更新功能,它从IANA获取更新;默认情况下启用;如果你想禁用它,请检查文档以了解详细信息。

    迁移

    在使用 Timex,并且希望迁移时,只要查看文件并记下任何已经更改的文件,就会有任何改变。 在几乎所有的情况下,功能都只是移动,或者稍微不同地访问。 在某些情况下行为已经改变,但是旧的行为可以手工实现。 对于已经删除或者不再可以用的事物,几乎是因为这些东西不再建议,或者不再有意义。 如果我错过了什么,或者在添加已经删除的东西时有很好的理由,我总是在问题跟踪中讨论。

    3.x-更改概述

    下面的代码将显示所有更改的列表,下面简要介绍了主要要点,以及如何将现有的timex代码迁移到个. x.。

    • 实际上,timex的所有API都集成在三个模块中: TimexDurationInterval。 当然,其他模块中也有 public api,但是你所做的大部分工作都可以通过这三种。
    • 除了 Time 之外,所有提供的类型都已经被删除,但的名称被重命名为 Duration,以便更好地适应它,TimezoneInfo 在处理不明确的结构时仍在内部,仍需要使用。 DateDateTime 现在是药药 1.3的一部分,NaiveDateTime 已经作为第一类类型添加。
    • 转换被重复,现在通过 Timex MODULE 访问: to_dateto_datetimeto_naive_datetimeto_erlto_unixto_gregorian_secondsto_gregorian_microseconds。 使用这些选项可以在类型之间来回转换。 除了很少例外之外,没有 from_* 转换。 必须使用标准库函数( 如 NaiveDateTime.new ) 或者从另一标准类型( 例如 ) 转换标准类型。 NaiveDateTime datetime元组到)。

    也有多种改进:

    • 微秒精度,它可以被维护
    • 来自 2.x 发行版的各种 Bug 修复
    • 大量的代码清理
    • 更快的编译
    • 固定 typespecs,文档和整个电路板的测试
    • 添加了Julian日历支持

    路线图

    如果你有特定请求,请在标题中打开"rfc",并且我们可以在社区中讨论它。

    • 100%测试覆盖( 正在进行中) !
    • QuickCheck测试( 还没有启动这里功能,但我确实希望尽快启动)
    • .NET 服务( 可能在下一版本中) 进行互操作的{ASP.NET} 格式/解析标记
    • 相对时间格式化程序/解析器,沿 fromNow。js。toNowtimeTotimeFrom 格式函数的行。
    • 日历时间格式化程序/分析器,在 moment。js时间格式程序的行中
    • 重复日期/时间 API

    许可证

    这个软件是在许可下的许可证。


    COM  proj  Projects  日期  Complete  Elixir  
    相关文章