use std::any::type_name;
use chrono::{DateTime, FixedOffset, NaiveDateTime, Utc};
use chrono::format::ParseError;
use openssl::asn1::Asn1Type;
pub fn print_type_of<T>(_: &T) -> &'static str {
let name = type_name::<T>();
print!("类型是: {}\n", name);
name
}
pub fn print_type_of_with_name<T>(_: &T, var_name: &str) -> &'static str {
let name = type_name::<T>();
print!("变量{}的类型是: {}\n", var_name, name);
name
}
pub fn vec_to_string(vec: Vec<u8>) -> String {
String::from_utf8_lossy(&vec).to_string()
}
pub fn parse_datetime(date_str: &str) -> Result<DateTime<Utc>, anyhow::Error> {
if let Ok(dt) = DateTime::parse_from_rfc3339(date_str) {
return Ok(dt.with_timezone(&Utc));
}
if let Ok(dt) = DateTime::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S%.fZ") {
return Ok(dt.with_timezone(&Utc));
}
if let Ok(ndt) = NaiveDateTime::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S%.f") {
return Ok(DateTime::<Utc>::from_naive_utc_and_offset(ndt, Utc));
}
anyhow::bail!("无法解析日期字符串");
}