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