时间戳 与 Unix时间戳

本文详细介绍了时间戳的概念,包括Unix时间戳的定义及其在不同编程语言中的实现,同时深入探讨了可信时间戳的法律效力、应用场景及在医疗、档案领域的进展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间戳定义(引之百度百科

  1).时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
  2).通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 
  3).它的提出主要是为用户提供一份电子证据, 以证明用户的某些数据的产生时间。 
  4).在实际应用上, 它可以使用在包括电子商务、 金融活动的各个方面, 尤其可以用来支撑公开密钥基础设施的 “不可否认” 服务。

时间戳分类(引之百度百科

自建时间戳:
此类时间戳是通过时间接收设备(如GPS,CDMA,北斗卫星)来获取时间到时间戳服务器上,并通过时间戳服务器签发时间戳证书。
此种时间戳可用来企业内部责任认定,在法庭认证时并不具备法律效力。
因其在通过时间接收设备接收时间时存在被篡改的可能,故此不能做为法律依据。

具有法律的效力的时间戳:
它是由我国中科院国家授时中心与北京联合信任技术服务有限公司负责建设的我国第三方可信时间戳认证服务。由国家授时中心负责时间的授时与守时监测。
因其守时监测功能而保障时间戳证书中的时间的准确性和不被篡改。
获取时间戳平台有“大众版权保护平台”,可与我国中科院国家授时中心时间同步。

时间戳组成部分(引之百度百科

时间戳(time-stamp)是一个经加密后形成的凭证文档,它包括三个部分
1)需加时间戳的文件的摘要(digest);
2)DTS收到文件的日期和时间;
3)DTS的数字签名。

一般来说,时间戳产生的过程为:用户首先将需要加时间戳的文件用Hash编码加密形成摘要,然后将该摘要发送到DTS,DTS在加入了收到文件摘要的日期和时间信息后再对该文件加密(数字签名),然后送回用户。
书面签署文件的时间是由签署人自己写上的,而数字时间戳则不然,它是***由认证单位DTS来加的,以DTS收到文件的时间为依据***。

法律效力(引之百度百科

自建时间戳不具备法律效力。
可信时间戳即由国家法定时间源来负责保障时间的授时和守时监测,任何机构包括时间戳中心自己不能对时间进行修改以保障时间的权威,只有这样产生的时间戳才具有法律效力。
可信 时间戳司法判例:
首例时间戳司法应用案例判决书发生法律效力附该案件裁判文书
2008年11月25日,深圳市龙岗区法院依据最高法院“知识产权司法保护活动月”的要求公开宣判知识产权纠纷案,其中“利龙湖”一案系国内首例时间戳技术司法应用案例,宣判后双方当事人均未提起上诉,该案判决书已经发生法律效力。
时间戳在医疗领域进程:
2010年11月14日下午,卫生部在国2招第五会议室组织部有关部门和专家召开了"可信时间戳与电子病历法律效力研讨论证会",医政司、政策法规司、 医院管理研究所、卫生部统计信息中心、协和医院、北大人民医院、北医三院、北京市西城法院法官、中国医院协会自律维权部、国家法官学院、国家授时中心、联合信任时间戳服务中心的有关领导和专家等参加了论证会。
会议听取了国家授时中心副主任窦忠和联合信任时间戳服务中心董事长张昌利的汇报。与会专家对可信时间戳在解决我国电子病历法律效力问题进行了深入的探讨和论证,认为TSA+CA的模式是一种有效解决电子病历法律效力的方法,建议在医院广泛采用,将选择部分试点医院开展试点应用,并作相关技术标准和法规的研究。
2011年5月4日健康报发表《可信时间戳为电子病历法律效力提供保证》的文章。
首次颁发档案管理系统接入可信时间戳核准证书

为规范和保障可信时间戳在档案领域的正确使用,日前,国家档案局档案科学技术研究所按照国家档案局技术部审核通过的可信时间戳档案应用方案要求,组织专家对首批3家公司开发的档案管理软件中的可信时间戳接入功能进行了检测,并向通过检测的软件开发商颁发可信时间戳接入核准书。国家授时中心负责授时和守时保障的联合信任时间戳服务中心将依据接入核准书,向相关档案软件用户提供可信时间戳的服务。 可信时间戳是由联合信任时间戳服务中心签发的一个电子凭证,用于证明电子数据文件自申请可信时间戳后内容保持完整、未被更改。可信时间戳接入核准书的颁发,标志着可信时间戳在档案领域规范化应用已经开始,并将起到电子档案和档案数字化副本内容防篡改、保障档案的法律凭证的作用。根据《电子签名法》有关数据电文原件形式的要求,申请了可信时间戳认证的电子文件、电子档案或纸质档案的数字化副本等可视为法规规定的原件形式。

什么是Unix时间戳(Unix timestamp)

整理杨琦 【http://www.cnblogs.com/yangqi/archive/2010/07/16/1778675.html】所得

什么是Unix时间戳(Unix timestamp)?
Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,
定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数
Unix时间戳不仅被使用在Unix 系统、类Unix系统中,也在许多其他操作系统中被广告采用。

目前相当一部分操作系统使用32位二进制数字表示时间
此类系统的Unix时间戳最多可以使用到格林威治时间2038年01月19日03时14分07秒(二进制:01111111 11111111 11111111 11111111)。
其后一秒,二进制数字会变为10000000 00000000 00000000 00000000,发生溢出错误,造成系统将时间误解为1901年12月13日20时45分52秒。
这很可能会引起软件故障,甚至是系统瘫痪。
使用64位二进制数字表示时间的系统(最多可以使用到格林威治时间292,277,026,596年12月04日15时30分08秒)则基本不会遇到这类溢出问题。

在不同编程语言中获取现在的Unix时间戳(Unix timestamp)

整理杨琦 【http://www.cnblogs.com/yangqi/archive/2010/07/16/1778675.html】所得

编程语言获取时间戳的方法
Javatime
JavaScripts1).Math.round(new Date().getTime()/1000) — > 2).getTime()返回数值的单位是毫秒
Microsoft .NET / C#epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000
MySQLSELECT unix_timestamp(now())
Perltime
PHPtime()
PostgreSQLSELECT extract(epoch FROM now())
Python先 import time 然后 time.time()
Ruby1).获取Unix时间戳:Time.now 或 Time.new —> 2).显示Unix时间戳:Time.now.to_i
SQL ServerSELECT DATEDIFF(s, ‘1970-01-01 00:00:00’, GETUTCDATE())
Unix / Linuxdate +%s
VBScript / ASPDateDiff(“s”, “01/01/1970 00:00:00”, Now())
其他操作系统(如果Perl被安装在系统中)命令行状态:perl -e “print time”

在不同编程语言中实现Unix时间戳到普通时间之间的转换

整理杨琦 【http://www.cnblogs.com/yangqi/archive/2010/07/16/1778675.html】所得

编程语言将时间戳转化为普通时间的方法
JavaString date = new java.text.SimpleDateFormat(“dd/MM/yyyy HH:mm:ss”).format(new java.util.Date(Unix timestamp * 1000))
JavaScripts先 var unixTimestamp = new Date(Unix timestamp * 1000) 然后 commonTime = unixTimestamp.toLocaleString()
Linuxdate -d @Unix timestamp
MySQLfrom_unixtime(Unix timestamp)
Perl先 my (刀)time = Unix timestamp 然后 my ($sec, $min, $hour, $day, $month, y e a r ) = ( l o c a l t i m e ( year) = (localtime( year)=(localtime(time))[0,1,2,3,4,5,6]
PHPdate(‘r’, Unix timestamp)
PostgreSQLSELECT TIMESTAMP WITH TIME ZONE ‘epoch’ + Unix timestamp) * INTERVAL ‘1 second’;
Python先 import time 然后 time.gmtime(Unix timestamp)
RubyTime.at(Unix timestamp)
SQL ServerDATEADD(s, Unix timestamp, ‘1970-01-01 00:00:00’)
VBScript / ASPDateAdd(“s”, Unix timestamp, “01/01/1970 00:00:00”)
其他操作系统(如果Perl被安装在系统中)命令行状态:perl -e “print scalar(localtime(Unix timestamp))”

在不同编程语言中实现普通时间到Unix时间戳之间的转换

整理杨琦 【http://www.cnblogs.com/yangqi/archive/2010/07/16/1778675.html】所得

编程语言将普通时间转化为时间戳的方法
Javalong epoch = new java.text.SimpleDateFormat(“dd/MM/yyyy HH:mm:ss”).parse(“01/01/1970 01:00:00”);
JavaScriptsvar commonTime = new Date(Date.UTC(year, month - 1, day, hour, minute, second))
MySQLSELECT unix_timestamp(time) —> 时间格式: YYYY-MM-DD HH:MM:SS 或 YYMMDD 或 YYYYMMDD
Perl先 use Time::Local 然后 my (刀)time = timelocal($sec, $min, $hour, $day, $month, $year);
PHPmktime(hour, minute, second, day, month, year)
PostgreSQLSELECT extract(epoch FROM date(‘YYYY-MM-DD HH:MM:SS’));
Python先 import time 然后 int(time.mktime(time.strptime(‘YYYY-MM-DD HH:MM:SS’, ‘%Y-%m-%d %H:%M:%S’)))
RubyTime.local(year, month, day, hour, minute, second)
SQL ServerSELECT DATEDIFF(s, ‘1970-01-01 00:00:00’, time)
Unix/Linuxdate +%s -d"Jan 1, 1970 00:00:01"
VBScript / ASPDateDiff(“s”, “01/01/1970 00:00:00”, time)
### 时间戳的概念及其生成和使用 时间戳是一种用来表示某一时刻或事件发生时的时间值,通常是一个数字或字符串,表示从一个特定的起始时间点(如 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、付费专栏及课程。

余额充值