时间戳定义(引之百度百科
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】所得
编程语言 | 获取时间戳的方法 |
---|---|
Java | time |
JavaScripts | 1).Math.round(new Date().getTime()/1000) — > 2).getTime()返回数值的单位是毫秒 |
Microsoft .NET / C# | epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000 |
MySQL | SELECT unix_timestamp(now()) |
Perl | time |
PHP | time() |
PostgreSQL | SELECT extract(epoch FROM now()) |
Python | 先 import time 然后 time.time() |
Ruby | 1).获取Unix时间戳:Time.now 或 Time.new —> 2).显示Unix时间戳:Time.now.to_i |
SQL Server | SELECT DATEDIFF(s, ‘1970-01-01 00:00:00’, GETUTCDATE()) |
Unix / Linux | date +%s |
VBScript / ASP | DateDiff(“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】所得
编程语言 | 将时间戳转化为普通时间的方法 |
---|---|
Java | String 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() |
Linux | date -d @Unix timestamp |
MySQL | from_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] |
PHP | date(‘r’, Unix timestamp) |
PostgreSQL | SELECT TIMESTAMP WITH TIME ZONE ‘epoch’ + Unix timestamp) * INTERVAL ‘1 second’; |
Python | 先 import time 然后 time.gmtime(Unix timestamp) |
Ruby | Time.at(Unix timestamp) |
SQL Server | DATEADD(s, Unix timestamp, ‘1970-01-01 00:00:00’) |
VBScript / ASP | DateAdd(“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】所得
编程语言 | 将普通时间转化为时间戳的方法 |
---|---|
Java | long epoch = new java.text.SimpleDateFormat(“dd/MM/yyyy HH:mm:ss”).parse(“01/01/1970 01:00:00”); |
JavaScripts | var commonTime = new Date(Date.UTC(year, month - 1, day, hour, minute, second)) |
MySQL | SELECT unix_timestamp(time) —> 时间格式: YYYY-MM-DD HH:MM:SS 或 YYMMDD 或 YYYYMMDD |
Perl | 先 use Time::Local 然后 my (刀)time = timelocal($sec, $min, $hour, $day, $month, $year); |
PHP | mktime(hour, minute, second, day, month, year) |
PostgreSQL | SELECT 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’))) |
Ruby | Time.local(year, month, day, hour, minute, second) |
SQL Server | SELECT DATEDIFF(s, ‘1970-01-01 00:00:00’, time) |
Unix/Linux | date +%s -d"Jan 1, 1970 00:00:01" |
VBScript / ASP | DateDiff(“s”, “01/01/1970 00:00:00”, time) |