1 个不稳定版本
| 0.1.0 | 2024年4月10日 |
|---|
#86 在 值格式化
用于 ctgen
77KB
1K SLoC
rhai-chrono
chrono DateTime 和 TimeDelta 包,用于 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::DateTime 和 chrono::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