You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Zig标准库生成特定格式的时间戳字符串?

在Zig中生成符合YYYY-MM-DDTHH:MM:SS.sssZ格式的时间戳字符串

你可以通过Zig标准库的std.time和std.fmt模块实现这个需求,核心步骤是获取UTC时间戳并格式化目标字符串:

完整代码示例

const std = @import("std");

pub fn main() !void {
    // 获取当前UTC时间的纳秒级时间戳
    const now_ns = std.time.nanoTimestamp();
    // 将时间戳转换为UTC日期时间结构体
    const utc = std.time.epochToUTC(now_ns);
    
    // 格式化目标时间戳字符串,补零确保位数一致
    const timestamp = try std.fmt.allocPrint(
        std.heap.page_allocator,
        "{d:04}-{d:02}-{d:02}T{d:02}:{d:02}:{d:02}.{d:03}Z",
        .{
            utc.year,
            utc.month,
            utc.day,
            utc.hour,
            utc.minute,
            utc.second,
            utc.nanosecond / 1_000_000 // 纳秒转毫秒,取整数部分
        }
    );
    defer std.heap.page_allocator.free(timestamp);
    
    std.debug.print("{s}\n", .{timestamp});
}

代码说明

  • 获取时间戳:std.time.nanoTimestamp()返回从UNIX纪元开始的纳秒数,本身就是UTC时间,无需额外转换时区。
  • 转换为日期时间结构体:std.time.epochToUTC()将纳秒时间戳解析为包含年、月、日、时、分、秒、纳秒的std.datetime.UTC结构体,方便后续格式化。
  • 格式化字符串:
    • 使用{d:04}、{d:02}、{d:03}确保数字补零到指定位数(比如月份4会变成04,毫秒5会变成005)。
    • utc.nanosecond / 1_000_000将纳秒转换为毫秒,取前三位有效数字,对应格式中的.000部分。
  • 内存管理:std.fmt.allocPrint会在堆上分配内存存储格式化后的字符串,记得用defer释放避免内存泄漏。

这段代码生成的字符串会完全匹配你需要的2025-04-18T14:03:52.000Z格式。

内容的提问来源于stack exchange,提问作者mbithi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:12:38