#date-time #chrono #rhai #date

rhai-chrono

Rhai 包用于使用 chrono DateTime

1 个不稳定版本

0.1.0 2024年4月10日

#86值格式化


用于 ctgen

BSD-2-Clause

77KB
1K SLoC

Crates.io API dependency status build and test codecov

rhai-chrono

chrono DateTimeTimeDelta 包,用于 rhai

快速入门

与 rhai v1.17, chrono v0.4.37 和 chrono-tz v0.9 开发和测试。

包含

添加到 Cargo.toml

rhai = { version = "^1.15" } # in case you've missed it
rhai-chrono = { version = "^0" }

注册

包含包

use rhai::Engine;
use rhai_chrono::ChronoPackage;

注册包

let mut engine = Engine::new();

let package = ChronoPackage::new();
package.register_into_engine(&mut engine);

行为

该包公开了两种包装类型 DateTimeFixed(包装 chrono::DateTime<FixedOffset>)和 Timedelta(包装 chrono::TimeDelta)。

两种包装类型都可以使用不同的 构造函数 以多种方式初始化。

一旦初始化,用户可以调用 方法 和在包装上 获取 / 设置 属性。

某些方法产生输出值,可以是数字、字符串或布尔值。

许多方法和属性都有别名或变体以方便使用。

所有方法和属性都遵循(但略有细微差别)您通常使用 chrono::DateTimechrono::TimeDelta 的方式。

请查看 示例 部分以获取更多有关实际使用的详细信息。

API

DateTime

所有 DateTime 构造函数内部创建一个 DateTime<FixedOffset>。这个当前限制值得注意,当处理时区时。

构造函数

datetime_utc() | datetime_now():创建一个新的DateTime对象,其设置为当前的UTC时间。

datetime_local():创建一个新的DateTime对象,其设置为当前的本地时间。

datetime_unix(i64):创建一个新的DateTime对象,其设置为给定的UNIX时间戳(以秒为单位)。

datetime_millis(i64):创建一个新的DateTime对象,其设置为给定的UNIX时间戳(以毫秒为单位)。

datetime_micros(i64):创建一个新的DateTime对象,其设置为给定的UNIX时间戳(以微秒为单位)。

datetime_nanos(i64):创建一个新的DateTime对象,其设置为给定的UNIX时间戳(以纳秒为单位)。

datetime_rfc2822(String):使用有效的RFC2822字符串创建一个新的DateTime对象。

datetime_rfc3339(String):使用有效的RFC3339字符串创建一个新的DateTime对象。

datetime_parse(timestamp: String, format: String):使用自定义的时间戳和strftime语法格式创建一个新的DateTime对象。

设置器

timezone = String:接受有效的IANA时区名称、"local"或有效的偏移量(例如 "-06:00")。

time = String:接受格式为 %H:%M:%S 的字符串。

ordinal = i64:设置从1开始的年的第几天。

ordinal0 = i64:设置从0开始的年的第几天。

year = i64:设置年份

month = i64:设置月份,从1开始为1月。

month0 = i64:设置月份,从0开始为1月。

day = i64:设置月份中的日期,从1开始为1日。

day0 = i64:设置月份中的日期,从0开始为1日。

hour = i64:设置一天中的小时。

minute = i64:设置一小时中的分钟。

second = i64:设置分钟的第二个。

nanosecond = i64:设置超过最后一个完整秒的纳秒。

获取器

timezone | offset:返回当前设置的偏移量的字符串表示。

time:返回当前时间段的字符串表示,格式为%H:%M:%S

ordinal:返回从1开始计数的年份的序数日,1表示1月1日。

ordinal0:返回从0开始计数的年份的序数日,0表示1月1日。

year:获取年份。

month:获取月份,从1开始计,1表示1月。

month0:获取月份,从0开始计,0表示1月。

day:获取月份中的日期,从1开始计,1表示1号。

day0:获取月份中的日期,从0开始计,0表示1号。

hour:获取一天中的小时。

minute:获取一小时中的分钟。

second:获取一分钟中的秒。

nanosecond:获取超过最后一个完整秒的纳秒。

方法

to_string() | to_rfc3339():返回RFC3339格式的字符串。

to_rfc2822():返回RFC2822格式的字符串。

timestamp():返回UNIX时间戳(i64)。

timestamp_millis():返回UNIX时间戳(i64)的毫秒表示。

timestamp_micros():返回UNIX时间戳(i64)的微秒表示。

timestamp_nanos():返回UNIX时间戳(i64)的纳秒表示或范围错误。

timestamp_subsec_millis():返回超过最后一个完整秒的毫秒数(i64)。

timestamp_subsec_micros():返回超过最后一个完整秒的微秒数(i64)。

timestamp_subsec_nanos():返回超过最后一个完整秒的纳秒数(i64)。

years_since(Optional DateTimeFixed):返回有符号的年份差(i64)。如果未提供第一个参数,则使用当前本地时间进行比较。

format(format: String, Optional locale: String): 返回一个自定义格式的时间戳。格式参数必须使用 strftime 语法格式。用户可以选择以字符串形式提供一个有效的 locale 名称。

timezone(String) | set_timezone(String) | with_timezone(String): 根据有效的 IANA 时区名称、“local” 或有效偏移量(例如“-06:00”)设置 偏移量

timezone() | offset() | get_timezone() | get_offset(): 返回当前设置的 偏移量 的字符串表示形式。

time(String) | set_time(String) | with_time(String): 使用格式为 %H:%M:%S 的字符串设置时间段。

time() | get_time(): 返回当前时间段的字符串表示形式,格式为 %H:%M:%S

ordinal(i64) | set_ordinal(i64) | with_ordinal(i64): 从1月1日开始设置一年的第几天。

ordinal() | get_ordinal(): 返回从1月1日开始的一年中的第几天,以 i64 表示。

ordinal0(i64) | set_ordinal0(i64) | with_ordinal0(i64):设置从0开始计年的第一天为1月1日。

ordinal0() | get_ordinal0():返回从0开始计年的i64类型序数日。

year(i64) | set_year(i64) | with_year(i64):设置年份。

year() | get_year():获取年份。

month(i64) | set_month(i64) | with_month(i64):设置从1开始计月,即1月为1月。

month() | get_month():获取从1开始计月,即1月为1月。

month0(i64) | set_month0(i64) | with_month0(i64):设置从1开始计月,即1月为1月。

month0() | get_month0():获取从1开始计月,即1月为1月。

day(i64) | set_day(i64) | with_day(i64):设置从1开始计月的第一天为1日。

day() | get_day():获取从1开始计月的第一天为1日。

day0(i64) | set_day0(i64) | with_day0(i64):将月份的起始日从0设置为1日。

day0() | get_day0():获取月份的起始日(从0开始为1日)。

hour(i64) | set_hour(i64) | with_hour(i64):设置一天的小时数。

hour() | get_hour():获取一天的小时数。

minute(i64) | set_minute(i64) | with_minute(i64):设置小时中的分钟数。

minute() | get_minute():获取小时中的分钟数。

second(i64) | set_second(i64) | with_second(i64):设置分钟中的秒数。

second() | get_second():获取分钟中的秒数。

nanosecond(i64) | set_nanosecond(i64) | with_nanosecond(i64):设置超过最后完整秒的纳秒数。

nanosecond() | get_nanosecond():获取超过最后完整秒的纳秒数。

add_days(i64) | plus_days(i64):向DateTime添加指定天数。

sub_days(i64) | minus_days(i64):从DateTime中减去指定天数。

add_months(i64) | plus_months(i64):将指定月份数量添加到DateTime。

sub_months(i64) | minus_months(i64):从DateTime中减去指定月份数量。

add_timedelta(Timedelta) | plus_timedelta(Timedelta):将Timedelta添加到DateTime。

sub_timedelta(Timedelta) | minus_timedelta(Timedelta):从DateTime中减去Timedelta。

diff(DateTimeFixed) | cmp(DateTimeFixed) | compare(DateTimeFixed) | duration_since(DateTimeFixed) | signed_duration_since(DateTimeFixed):计算两个DateTimeFixed实例之间的差异并返回一个Timedelta。

TimeDelta

Timedelta可以通过比较两个DateTimeFixed实例或以下构造函数之一来创建。

构造函数

timedelta() | timedelta_zero():创建一个空的Timedelta实例。

timedelta_min():创建可能的最小Timedelta。

timedelta_max():创建可能的最大Timedelta。

timedelta_seconds(i64, 可选 i64):创建一个包含秒数和可选纳秒段Timedelta。

timedelta_days(i64):创建一个包含天数Timedelta。相当于days * 86400秒。

timedelta_weeks(i64):创建一个包含周数的Timedelta。相当于weeks * 7 * 86400秒。

timedelta_hours(i64):创建一个具有小时数的Timedelta。相当于hours * 3600秒。

timedelta_minutes(i64):创建一个具有分钟数的Timedelta。相当于minutes * 60秒。

timedelta_millis(i64) | timedelta_milliseconds(i64):创建一个毫秒Timedelta。1000毫秒等于1秒。

timedelta_micros(i64) | timedelta_microseconds(i64):创建一个微秒Timedelta。1,000,000微秒等于1秒。

timedelta_nanos(i64) | timedelta_nanoseconds(i64):创建一个纳秒Timedelta。1,000,000,000纳秒等于1秒。

设置器

设置器没有太多意义。它们在原始的chrono::TimeDelta中也不存在。要从timedelta中添加/减去,请使用其他timedelta和add() / sub()方法。

获取器

is_zero:如果Timedelta正好是0,则返回true

seconds:返回Timedelta中的秒数。

minutes:返回Timedelta中的分钟数。

hours:返回Timedelta中的小时数。

days:返回Timedelta中的天数。

weeks:返回Timedelta中的周数。

subsec_nanos:返回超过最后完整秒的纳秒数。

milliseconds:返回Timedelta中的毫秒数。

microseconds:返回Timedelta中的微秒数或越界错误。

nanoseconds:返回Timedelta中的纳秒数或越界错误。

方法

is_zero():如果Timedelta正好是0,则返回true

abs():确保Timedelta是正数。

add(Timedelta) | plus(Timedelta):将Timedelta添加到当前值。

sub(Timedelta) | minus(Timedelta):从当前值减去Timedelta。

seconds() | get_seconds():返回Timedelta中的秒数。

minutes() | get_minutes():返回Timedelta中的分钟数。

hours() | get_hours():返回Timedelta中的小时数。

days() | get_days():返回Timedelta中的天数。

weeks() | get_weeks():返回Timedelta中的周数。

subsec_nanos() | get_subsec_nanos():返回超出最后一个完整秒的纳秒数。

milliseconds() | get_milliseconds():返回Timedelta中的毫秒数。

microseconds() | get_microseconds():返回Timedelta中的微秒数或越界错误。

nanoseconds() | get_nanoseconds():返回Timedelta中的纳秒数或越界错误。

示例

创建一个 DateTimeFixed 实例并进行操作。

let dt = datetime_rfc3339("1989-08-09T09:30:11+00:00"); 

let timestamp = dt.timestamp();     // 618658211
let rfc2822_str = dt.to_rfc2822();  // Wed, 9 Aug 1989 09:30:11 +0000

let dt_mysql = datetime_parse("1989-08-09 09:30:11", "%Y-%m-%d %H:%M:%S");

let diff = dt.diff(dt_mysql);       // Timedelta

let seconds_diff = diff.seconds;    // 0

dt.timezone("America/Edmonton"); 

let rfc2822_str2 = dt.to_rfc2822(); // Wed, 9 Aug 1989 03:30:11 -0600

let offset = dt.timezone();         // -06:00

dt.time("12:15"); 

let time = dt.time;                 // 12:15:00

创建一个 Timedelta 实例并向其添加内容。

let td = timedelta_days(9);
td.plus(timedelta_hours(8));
td.plus(timedelta_seconds(7));

let seconds = td.seconds;           // 9 * 86400 + 8 * 3600 + 7

综合运用

let token_created = datetime_utc(); // now in UTC
token_created.add_timedelta(timedelta_weeks(4)); // +4 weeks

let token_expires_timestamp = token_created.format("%Y-%m-%d %H:%M:%S");

// or instead of adding a timedelta we could use the internals of DateTime itself

let token_created = datetime_utc(); // now in UTC
token_created.add_months(1); // +1 month

let token_expires_timestamp = token_created.format("%Y-%m-%d %H:%M:%S");

许可证

此库(rhai-chrono)在BSD 2许可证下开源。

依赖关系

~9MB
~130K SLoC