各种时间戳

转载:http://bjtime.cn/info/view.asp?id=301

timeval为unix时间从1970年开始算,最小单位是微秒。

struct timeval  
{  
__time_t tv_sec;       //秒
__suseconds_t tv_usec;  //微秒

1、获得系统的timeval

void gettimeval(struct timeval* tv)
{
    union {
             __int64 ns100;
             FILETIME ft;
    } now;
    GetSystemTimeAsFileTime (&now.ft);
    tv->tv_usec =  ((now.ns100/10)%1000000); //微秒
    tv->tv_sec =  ((now.ns100 - 116444736000000000) / 10000000); //1970年以来的秒数
 
}

//116444736000000000为1601年到1970年的秒数。因windows时间从1601年开始算,最小单位是100ns。

2、ntp时间戳

struct ntptime 
{
    unsigned int integer; //1900年以来的秒数
    unsigned int fraction;//小数部份,单位是微秒数的4294.967296(=2^32/10^6)倍
};

3、timeval到ntp时间戳的转换

ntptime.integar=timeval.tv_sec+JAN_1970;
ntptime.fraction=timeva.tv_usec* 0x100000000/1000000;

其中:
#define JAN_1970 0x83aa7e80 // (2208988800) 1900年到1970年的秒数

4、ntp时间戳转换为1970以来的时间

秒数=ntptime.integar-JAN_1970;
微秒数=ntptime.fraction *1000000/0x100000000 ;
### 时间戳的概念及其生成和使用 时间戳是一种用来表示某一时刻或事件发生时的时间值,通常是一个数字或字符串,表示从一个特定的起始时间点(如 UNIX 时间戳的起始时间为 1970 年 1 月 1 日 UTC)到当前时刻所经过的时间量[^1]。 #### C# 中生成时间戳的方法 在 C# 中可以通过计算当前时间和 Unix 起始时间之间的差值来生成时间戳。以下是一个示例代码: ```csharp public virtual string GetTimestamp() { DateTime currentTime = DateTime.Now; DateTime epochTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); TimeSpan timeSpan = currentTime.ToUniversalTime() - epochTime; long timestamp = (long)timeSpan.TotalSeconds; return timestamp.ToString(); } ``` 此方法返回的是一个 10 位整数形式的时间戳,精确到秒级别[^2]。 #### Python 中生成时间戳并应用其生成文件名 在 Python 中可以利用 `datetime` 和 `time` 模块轻松生成时间戳,并将其应用于各种场景,例如生成带有唯一性的文件名。以下是具体实现方式: ```python import datetime import os def generate_timestamp_filename(prefix="file_", suffix=".txt"): now = datetime.datetime.now() timestamp = int(now.timestamp()) # 获取当前时间戳 filename = f"{prefix}{timestamp}{suffix}" return filename filename = generate_timestamp_filename() print(f"Generated Filename: {filename}") ``` 这段代码通过调用 `now.timestamp()` 方法获得当前时间戳,并以此为基础构建具有唯一名称的文件路径[^3]。 #### 随机数种子初始化中的时间戳应用 除了直接作为时间标记外,时间戳还常被用作随机数生成器的种子值。由于时间戳会随时间不断改变,因此非常适合用于设置初始状态下的伪随机序列。下面展示了一种基于 C 的简单例子: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ srand((unsigned)time(NULL)); // 使用时间戳初始化随机数种子 printf("%d\n", rand()); return 0; } ``` 这里展示了如何利用标准库函数 `time` 来获取当前时间戳,并传递给 `srand` 函数完成随机化过程[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值