C#:时间与时间戳的转换

发布于:2024-12-08 ⋅ 阅读:(110) ⋅ 点赞:(0)

1、将 DateTime 转换为 Unix 时间戳(秒)

public static long DateTimeToUnixTimestamp(DateTime dateTime)
{
    // 定义UTC纪元时间
    DateTime epochStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    
    // 计算从UTC纪元时间到指定时间的总秒数
    TimeSpan timeSpan = dateTime.Subtract(epochStart);
    
    // 返回总秒数
    return (long)timeSpan.TotalSeconds;
}

2、将 Unix 时间戳 转换为 DateTime 并格式化为“年月日时分秒”

public static string UnixTimestampToDateTime(long timestamp, string format = "yyyy/MM/dd HH:mm:ss")
{
    // 定义UTC纪元时间
    DateTime epochStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    
    // 使用时间戳添加到UTC纪元时间上,得到对应的DateTime对象
    DateTime dateTime = epochStart.AddSeconds(timestamp);
    
    // 转换为本地时间(如果需要的话)
    dateTime = dateTime.ToLocalTime();
    
    // 按照指定格式返回字符串
    return dateTime.ToString(format);
}

3、实例

// 创建一个DateTime对象
DateTime now = DateTime.Now;

// 将当前时间转换为Unix时间戳
long timestamp = DateTimeToUnixTimestamp(now);
Console.WriteLine($"Current Unix Timestamp: {timestamp}");

// 将Unix时间戳转换回DateTime并格式化输出
string formattedDate = UnixTimestampToDateTime(timestamp);
Console.WriteLine($"Formatted Date: {formattedDate}");

补充:如果数据是字符串而不是DateTime,转为时间戳

// 你的日期字符串
string date = "2024/09/08";
// 定义日期格式
string format = "yyyy/MM/dd";  // 指定确切的格式
// 尝试解析日期字符串
if (DateTime.TryParseExact(date, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate)){
    // 将日期转换为UTC时间
    DateTime utcDate = parsedDate.ToUniversalTime();
    // 获取Unix时间戳(秒)
    long timestampSeconds = ((DateTimeOffset)utcDate).ToUnixTimeSeconds();
    // 如果你需要毫秒级别的时间戳
    long timestampMilliseconds = ((DateTimeOffset)utcDate).ToUnixTimeMilliseconds();
    // 输出结果
    Console.WriteLine($"原始日期: {parsedDate.ToString("yyyy/MM/dd")}");
    Console.WriteLine($"对应的Unix时间戳(秒): {timestampSeconds}");
    Console.WriteLine($"对应的Unix时间戳(毫秒): {timestampMilliseconds}");
}
else{
    Console.WriteLine("无法解析提供的日期字符串。");
}


网站公告

今日签到

点亮在社区的每一天
去签到