一、何为时间戳
官方给出的定义:时间戳(timestamp)是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。 它的提出主要是为用户提供一份电子证据, 以证明用户的某些数据的产生时间。 在实际应用上, 它可以使用在包括电子商务、 金融活动的各个方面, 尤其可以用来支撑公开密钥基础设施的 “不可否认” 服务。
我的理解:
(1).定义: 时间戳就是根据当前系统时间减去格林威治时间后的一组数字。
(2).作用: 唯一地标识某一时刻。
在其他博客上了解到时间戳的具体应用点击打开链接
(3).应用:
.在银行account表中建立时间戳字段timestamp,设定为文本类型varchar。
.当银行A读取account表中的存款字段时,同时也读取时间戳字段,比如123456。
.当银行A修改完存款数值后,进行存盘操作时,将先前读取的时间戳123456与当时表中的时间戳进行一次对比,如果一致,那么允许存盘,然后生成一个新的时间戳比如456789替换表中原有的时间戳123456。
若没有使用时间戳:
银行A和银行B同时打开你的账户,看到的金额都是1000元。与此同时,两个银行读取的时间戳都是12345.
若使用时间戳:
当银行A打开账户的时候,把1000元改成1500元,存盘,系统将对比先前的时间戳与存盘时表中的时间戳是否一致,现在致,允许存盘。存盘时,将生成了一个新的时间戳45678。B银行也将1000元修改成了1500元,存盘,系统对比先前的时间戳3456是否与存盘时表中的时间戳一致,发现先前的时间戳123456已经与现在的时间戳456789相异,系统拒绝存盘,要求刷新数据,那么数据刷新之后1000元已经因为之前A银行存入了500元而成为了1500元,那么B银行就会在1500元的基础上改为2000元,再次存盘,系统允许.
简而言之:就是在操作的时候,通过对比修改之前的数据表中的时间戳与修改之后的数据表中的时间戳是否一致。
若一致,允许存储,同时生成一个新的时间戳。
若不一致,就要求刷新数据,在新的数据上进行修改。再次存储。
二、如何使用时间戳
将时间戳转换为时间
Long timestamp = System.currentTimeMillis();//获取系统的当前时间戳
SimpleDateFormat sdf = new SimpleDateFormat ("yyyy/MM/dd HH:mm:ss");//格式化日期
Date date = new Date(timestamp);
String datetime = formatter.format(date);
原理:
currentTimeMillis方法返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
SimpleDateFormat函数的继承关系:
java.lang.Object | |||
↳ | java.text.Format | ||
↳ | java.text.DateFormat | ||
↳ | java.text.SimpleDateFormat |
格式化时相对应的字母表的含义
Symbol | Meaning | Kind | Example |
D | day in year | (Number) | 189 |
E | day of week | (Text) | E /EE /EEE :Tue, EEEE :Tuesday, EEEEE :T |
F | day of week in month | (Number) | 2 (2nd Wed in July) |
G | era designator | (Text) | AD |
H | hour in day (0-23) | (Number) | 0 |
K | hour in am/pm (0-11) | (Number) | 0 |
L | stand-alone month | (Text) | L :1 LL :01 LLL :Jan LLLL :January LLLLL :J |
M | month in year | (Text) | M :1 MM :01 MMM :Jan MMMM :January MMMMM :J |
S | fractional seconds | (Number) | 978 |
W | week in month | (Number) | 2 |
Z | time zone (RFC 822) | (Time Zone) | Z /ZZ /ZZZ :-0800 ZZZZ :GMT-08:00 ZZZZZ :-08:00 |
a | am/pm marker | (Text) | PM |
c | stand-alone day of week | (Text) | c /cc /ccc :Tue, cccc :Tuesday, ccccc :T |
d | day in month | (Number) | 10 |
h | hour in am/pm (1-12) | (Number) | 12 |
k | hour in day (1-24) | (Number) | 24 |
m | minute in hour | (Number) | 30 |
s | second in minute | (Number) | 55 |
w | week in year | (Number) | 27 |
y | year | (Number) | yy :10 y /yyy /yyyy :2010 |
z | time zone | (Time Zone) | z /zz /zzz :PST zzzz :Pacific Standard Time |
' | escape for text | (Delimiter) | 'Date=' :Date= |
'' | single quote | (Literal) | 'o''clock' :o'clock |
日期和时间格式由日期和时间模式字符串指定。在日期和时间模式字符串中,未加引号的字母A到 Z和 a 到 z被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 ('
) 引起来,以免进行解释。"''"
表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配
参考资料点击打开链接