Strftime格式问题:如何获取秒后完整9位数字的时间字符串?
如何用strftime生成包含9位纳秒的时间格式
标准的strftime没有直接输出9位纳秒的格式符,%f仅能获取6位微秒,要实现你需要的格式(如2022/12/05 00:00:04.530418100),需要结合对应语言/环境的工具,单独获取纳秒字段后拼接,或者使用支持纳秒的格式化替代方案,以下是常见场景的解决方法:
Python(3.9+)
Python的datetime对象提供了nanosecond属性直接获取9位纳秒值,你可以先用strftime格式化到秒级,再拼接纳秒部分:
from datetime import datetime current_time = datetime.now() # 先格式化日期、时间到秒,再拼接9位纳秒 formatted_time = current_time.strftime("%Y/%m/%d %H:%M:%S.") + f"{current_time.nanosecond:09d}" print(formatted_time)
C语言
标准C的strftime不支持纳秒,需要通过clock_gettime获取包含纳秒的timespec结构体,再手动拼接:
#include <stdio.h> #include <time.h> int main() { struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); struct tm local_tm; localtime_r(&ts.tv_sec, &local_tm); char time_buffer[32]; // 格式化到秒级 strftime(time_buffer, sizeof(time_buffer), "%Y/%m/%d %H:%M:%S.", &local_tm); // 拼接9位纳秒(补零确保长度) printf("%s%09ld\n", time_buffer, ts.tv_nsec); return 0; }
Java(8+)
Java的SimpleDateFormat不支持纳秒,改用DateTimeFormatter,通过SSSSSSSSS格式符直接输出9位纳秒:
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class NanoTimeFormat { public static void main(String[] args) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSSSSSSSS"); String formatted = LocalDateTime.now().format(formatter); System.out.println(formatted); } }
核心思路:由于strftime的标准定义里没有纳秒格式,要么拆分步骤——用strftime处理秒及以上部分,再单独拼接纳秒;要么使用对应语言中原生支持纳秒格式化的工具类替代strftime。
内容的提问来源于stack exchange,提问作者ryan corner
相关产品推荐
相关产品推荐

