ratchjob 0.2.1

一个rust实现的分布式任务调度平台服务。计划完全兼容xxl-job协议,然后再增强一些任务调度平台能力。
Documentation
use chrono::{DateTime, FixedOffset, Local, Offset, Utc};
use std::time::SystemTime;

/// Returns the duration since UNIX_EPOCH. Panics only if system clock is before epoch.
#[inline]
fn since_epoch() -> std::time::Duration {
    SystemTime::now()
        .duration_since(SystemTime::UNIX_EPOCH)
        .expect("system clock is before UNIX epoch")
}

pub fn now_millis() -> u64 {
    since_epoch().as_millis() as u64
}

pub fn now_millis_i64() -> i64 {
    since_epoch().as_millis() as i64
}

pub fn now_second_i32() -> i32 {
    since_epoch().as_secs() as i32
}

pub fn now_second_u32() -> u32 {
    since_epoch().as_secs() as u32
}

const DATETIME_TIMESTAMP_FMT: &str = "%Y-%m-%dT%H:%M:%S%.3f%:z";

pub fn get_now_timestamp_str(offset: &FixedOffset) -> String {
    DateTime::<Utc>::from(SystemTime::now())
        .with_timezone(offset)
        .format(DATETIME_TIMESTAMP_FMT)
        .to_string()
}

pub fn get_local_offset() -> FixedOffset {
    Local::now().offset().fix()
}

pub fn get_datetime_by_second(
    secs: u32,
    fixed_offset: &FixedOffset,
) -> Option<DateTime<FixedOffset>> {
    DateTime::<Utc>::from_timestamp(secs as i64, 0).map(|v| v.with_timezone(fixed_offset))
}

pub fn get_datetime_millis(
    mills: i64,
    fixed_offset: &FixedOffset,
) -> Option<DateTime<FixedOffset>> {
    DateTime::<Utc>::from_timestamp_millis(mills).map(|v| v.with_timezone(fixed_offset))
}