我可以在基板运行时模块中将当前时间戳记为<timestamp::Module<T>>::get()
。
我该如何执行基本算术(加法,减法)?
decl_module! {
pub struct Module<T: Trait> for enum Call where origin: T::Origin {
fn deposit_event<T>() = default;
pub fn func1(origin) -> Result {
let now = <timestamp::Module<T>>::get();
const DURATION = 60 * 5;
// what is the proper way of performing the following operation?
// let future = now + DURATION;
// At some point in future, can I perform the following comparison?
if now > future {
// ... some code
}
}
}
}
其他问题:
这带来了一个我不确定Rust / Rust文档的问题。类型T::Moment
必须具有特征SimpleArithmetic
,这又需要类型具有特征TryInto<u32>
。
这应该可行,
let tmp: u32 = DURATION + now.try_into()?;
但实际上返回:
error[E0277]: cannot add `()` to `u32`
| no implementation for `u32 + ()`
|
= help: the trait `core::ops::Add<()>` is not implemented for `u32`
error[E0271]: type mismatch resolving `<() as core::convert::TryFrom<<T as srml_timestamp::Trait>::Moment>>::Error == &str`
| note: expected type `core::convert::Infallible`
= found type `&str`
其他问题-2
基本上,我经历了this thread。您能否发布一个示例,说明如何从Timestamp
转换为u32
/ u64
,以及如何从u32
/ u64
转换为Timestamp
,还有哪些其他方法需要引入模块吗?
谢谢。
答案 0 :(得分:1)
我无法弄清楚如何使用into()
,try_into()
,from()
,try_from()
。
但是从Shawn的例子以及Bryan所说的避免的地方,我可以通过now.as_()
轻松地将时间戳转换为u64。
如果任何人都可以使用into()
,from()
或其变体向我显示答案,我将很乐意更新此线程并将其标记为正确答案。