我正在尝试找到为Chrono添加天数的首选方法UTC
.我想在当前时间增加137天:
let dt = UTC::now();
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个日期选择器,我需要在几个月之间导航
let current = NaiveDate::parse_from_str("2020-10-15", "%Y-%m-%d").unwrap();
Run Code Online (Sandbox Code Playgroud)
我怎样才能生成日期2020-11-15
?
我正在使用计时箱; 经过一些挖掘后,我发现该DateTime
类型具有timestamp()
可以生成类型的纪元时间的函数i64
.但是,我无法找到如何将其转换回来DateTime
.
extern crate chrono;
use chrono::*;
fn main() {
let date = chrono::UTC.ymd(2020, 1, 1).and_hms(0, 0, 0);
println!("{}", start_date.timestamp());
// ...how to convert it back?
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将 JSON 解析为一个具有chrono::DateTime
字段的结构。JSON 以自定义格式保存时间戳,我为其编写了反序列化器。
我如何连接两者并使用它来工作#[serde(deserialize_with)]
?
我正在使用NaiveDateTime
更简单的代码
extern crate serde;
extern crate serde_json;
use serde::Deserialize;
extern crate chrono;
use chrono::NaiveDateTime;
fn from_timestamp(time: &String) -> NaiveDateTime {
NaiveDateTime::parse_from_str(time, "%Y-%m-%dT%H:%M:%S.%f").unwrap()
}
#[derive(Deserialize, Debug)]
struct MyJson {
name: String,
#[serde(deserialize_with = "from_timestamp")]
timestamp: NaiveDateTime,
}
fn main() {
let result: MyJson =
serde_json::from_str(r#"{"name": "asdf", "timestamp": "2019-08-15T17:41:18.106108"}"#)
.unwrap();
println!("{:?}", result);
}
Run Code Online (Sandbox Code Playgroud)
我收到三个不同的编译错误:
error[E0308]: mismatched types
--> src/main.rs:11:10
|
11 | #[derive(Deserialize, Debug)]
| ^^^^^^^^^^^ expected reference, found type parameter …
Run Code Online (Sandbox Code Playgroud) 我需要chrono::Date
今年一周的第一个和最后一个日期。
我有两个问题,首先我无法解析chrono
今年的星期,第二我无法获得本周的第一个/最后一个日期。(这里有很多其他语言的解决方案,但没有rust)
TLDR:我需要一个这样的函数:
fn x(week: isize) -> (Date<Local>, Date<Local>)
元组为(一周的第一天,一周的最后一天)。
我想将当前当地时间与恒定时间范围进行比较,但我当前的解决方案似乎比我预期的更困难。
\n\n我可以构造一个chrono::DateTime<Local>
with Local::now()
. 然后我可以费力地找出是否now
位于特定时间范围内,如下所示:
let current_hour = now.hour();\nlet current_minute = now.minute();\n\n// see if `now` lies between 06:00 and 23:00\ncurrent_hour >= 6 && current_hour < 23\n\n// note the inelegance of the syntax and the potential for fencepost errors\n
Run Code Online (Sandbox Code Playgroud)\n\n如果我想检查 06:12\xe2\x80\x9323:15 的范围,问题会变得更糟,因为我必须检查小时是否等于 6,然后检查分钟是否大于 12,然后检查 \ xe2\x80\x94 zzzzz...
\n\n那很无聊。我可以尝试使用 来表示字符串parse_from_rfc2822
,但是我必须首先发出当前日期,然后在一天中的时间进行编辑,然后检查解析错误,现在我又在睡觉了。
我想我只是错误地阅读了计时文档。如果我要实现该库,我会尝试构建一个TimeOfDay<Local>
实现 的数据类型Ord
,从而允许惯用的范围检查。我想它已经在某个地方了,但我只是想念它。
我遇到一个有趣的问题。由于某种原因,serde 无法chrono::DateTime<Utc>
从与序列化格式相同的字符串中反序列化对象(但如果我用它保存变量,它就会这样做):
use chrono; // 0.4.11
use serde_json; // 1.0.48
fn main() {
let date = chrono::Utc::now();
println!("{}", date);
let date_str = serde_json::to_string(&date).unwrap();
println!("{}", date_str);
let parsed_date: chrono::DateTime<chrono::Utc> = serde_json::from_str(&date_str).unwrap();
println!("{}", parsed_date);
assert_eq!(date, parsed_date);
let date = "2020-03-28T16:29:04.644008111Z";
let _: chrono::DateTime<chrono::Utc> = serde_json::from_str(&date).unwrap();
}
Run Code Online (Sandbox Code Playgroud)
这是游乐场链接
哪个输出:
Compiling playground v0.0.1 (/playground)
Finished dev [unoptimized + debuginfo] target(s) in 1.01s
Running `target/debug/playground`
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error("invalid type: integer `2020`, expected a formatted …
Run Code Online (Sandbox Code Playgroud) 我正在使用chrono crate,想要计算Duration
两个DateTime
s 之间的值。
use chrono::Utc;
use chrono::offset::TimeZone;
let start_of_period = Utc.ymd(2020, 1, 1).and_hms(0, 0, 0);
let end_of_period = Utc.ymd(2021, 1, 1).and_hms(0, 0, 0);
// What should I enter here?
//
// The goal is to find a duration so that
// start_of_period + duration == end_of_period
// I expect duration to be of type std::time
let duration = ...
let nb_of_days = duration.num_days();
Run Code Online (Sandbox Code Playgroud) 我似乎无法弄清楚如何使用 Rust 处理 Unix 时间戳chrono
。
我有以下代码,但是naive
和 因此datetime
变量不正确:
use chrono::{Utc, DateTime, NaiveDateTime};\n\nfn main() {\n println!("Hello, world!");\n\n let timestamp = "1627127393230".parse::<i64>().unwrap();\n let naive = NaiveDateTime::from_timestamp(timestamp, 0);\n let datetime: DateTime<Utc> = DateTime::from_utc(naive, Utc);\n\n println!("timestamp: {}", timestamp);\n println!("naive: {}", naive);\n println!("datetime: {}", datetime);\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n输出:
\nuse chrono::{Utc, DateTime, NaiveDateTime};\n\nfn main() {\n println!("Hello, world!");\n\n let timestamp = "1627127393230".parse::<i64>().unwrap();\n let naive = NaiveDateTime::from_timestamp(timestamp, 0);\n let datetime: DateTime<Utc> = DateTime::from_utc(naive, Utc);\n\n println!("timestamp: {}", timestamp);\n println!("naive: {}", naive);\n println!("datetime: …
Run Code Online (Sandbox Code Playgroud) 尝试运行一个简单的程序,但由于问题而失败
note: ld: framework not found Security
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
我尝试做一些调查,我发现 Cargo.toml 中的 chrono 0.4.19 指出了这一点。一旦我消除了这种依赖,它就会继续构建。我是 mac 世界的新手,看过各种建议,但我对这个问题非常无能为力。
我尝试对其进行 dockerise,然后它在容器上运行良好,但在我的 mac 上却不起作用。谁能指出我正确的方向吗?