Java - TimeStamp

Java - TimeStamp

2017-3-11

最近要用到时间戳,刚好Java自带的package中有tiemstamp的类。看看能不能满足我的需求。


首先描述一下我的需求吧。我现在要做一个周期性查询交换机流表项的功能,需要在每次查询流表项时记录当时的时间戳。然后我要根据时间戳输出info,并且在计算速率什么的时候也要用到时间戳。因此,必须能够提供下面的功能:

  • 时间戳要便于遍历和查询
  • 时间戳需要能够数值化
  • 时间戳与时间戳之间需要能够进行简单的加减运算,并能输出数值化的结果

好,需求如上。我们现在来看看Java(Java SE8)官方文档中的TimeStamp。首先我们来看看它的依赖关系:

Class Timestamp

java.lang.Object
    java.security.Timestamp
All Implemented Interfaces:
Serializable

public final class Timestamp
extends Object
implements Serializable

上面是官方的说明,我们可以看到:TimeStamp实现了Serializable接口,这个Serializable接口是什么呢?实现这个接口可以让这个类可序列化,所谓的可序列化就是java提供的通用数据保存和读取的接口。至于从什么地方读出来和保存到哪里去都被隐藏在函数参数的背后了。详细的内容可以参考我的另一篇博文java - 序列化和反序列化

然后我们来看看TimeStamp的构造函数和公共方法:

函数名原型描述
TimestampTimestamp(Date timestamp, CertPath signerCertPath)构造函数
equalsboolean equals(Object obj)Tests for equality between the specified object and this timestamp.
getSignerCertPathCertPath getSignerCertPath()Returns the certificate path for the Timestamping Authority.
getTimestampDate getTimestamp()Returns the date and time when the timestamp was generated.
hashCodeint hashCode()Returns the hash code value for this timestamp.
toStringString toString()Returns a string describing this timestamp.

还有一些继承自java.lang.Object的方法:clone, finalize, getClass, notify, notifyAll, wait, wait, wait。

我们重点看TimeStamp自身的方法:

先是构造函数,从上表中我们可以看出,在初始化一个TimeStamp对象时,我们需要一个Data对象和CertPath对象。这两个对象又是什么鬼呢?

我这里对它们做一个简单的介绍。Data类的构造方法有多个:

原型描述
Date()分配一个Data对象并初始化它的时间为最近的时间(毫秒级)
Date(int year, int month, int date)看看就知道,不细说了
Date(int year, int month, int date, int hrs, int min)看看就知道,不细说了
Date(int year, int month, int date, int hrs, int min, int sec)看看就知道,不细说了
Date(long date)分配一个Data对象并初始化它的时间为指定的数值(毫秒为单位),起始时间是January 1, 1970, 00:00:00 GMT
Date(String s)没有细说,不过我并不关心这个构造函数,感觉用到的场合并不多(应该说我想不到什么场合必须用这个构造函数)

好了,这样我们就能创建一个Data对象,并给它赋值了。因为我需要用TimeStamp来进行计算,所以使用Date(long date)构建函数会比较方便。然后我们来看看CertPath对象,CertPath是“An immutable sequence of certificates (a certification path).”…嗯?这是什么鬼,为什么一个时间戳和证书会扯上关系?

…百度了一些资料,感觉信息量有点多,所以先回避了。我在Java官方库中又找到了一个TimeStamp(java.sql.Timestamp)。而上面的是java.security.Timestamp(和安全有关,这里暂时不解释,之后有时间更新)

好的,我们现在来看看java.sql.Timestamp是怎么样的吧。首先我们来看看它的依赖关系:

Class Timestamp

java.lang.Object
    java.util.Date
        java.sql.Timestamp
All Implemented Interfaces:
Serializable, Cloneable, Comparable<Date>

public class Timestamp
extends Date

我们可以看到java.sql.Timestamp继承了Data类。我们再来看看它的构造函数和方法:

函数名原型描述
TimestampTimestamp(int year, int month, int date, int hour, int minute, int second, int nano)不解释
TimestampTimestamp(long time)这里输入的是毫秒级的时间戳,起始时间是January 1, 1970, 00:00:00 GMT,负数表示起始时间之前
afterboolean after(Timestamp ts)判断是否在ts之后(时间上)
beforeboolean before(Timestamp ts)判断是否在ts之前(时间上)
compareToint compareTo(Date o)与Data对象作比较
compareToint compareTo(Timestamp ts)与Timestamp对象作比较
equalsboolean equals(Object ts)
equalsboolean equals(Timestamp ts)
fromstatic Timestamp from(Instant instant)从一个TimeStamp对象中获取它的实例
getNanosint getNanos()获取TimeStamp的纳秒数值
getTimelong getTime()获取TimeStamp的毫秒数值
hashCodeint hashCode()返回该对象的哈希码
setNanosvoid setNanos(int n)设置TimeStamp的纳秒数值
setTimevoid setTime(long time)设置TimeStamp的毫秒数值
toInstantInstant toInstant()将Timestamp对象转换成一个实例
toLocalDateTimeLocalDateTime toLocalDateTime()将TimeStamp转换成LocalDateTime
toStringString toString()将TimeStamp转换成timestamp escape格式
valueOfstatic Timestamp valueOf(LocalDateTime dateTime)从一个LocalDateTime对象中获取Timestamp实例
valueOfstatic Timestamp valueOf(String s)将一个timestamp escape格式的字符串转换成Timestamp

然后还有继承自java.util.Date的方法:after, efore, clone, getDate, getDay, getHours, getMinutes, getMonth, getSeconds, getTimezoneOffset, getYear, parse, setDate, setHours, setMinutes, setMonth, setSeconds, setYear, toGMTString, toLocaleString,UTC;继承自Object的方法:finalize, getClass, notify, notifyAll, wait, wait, wait

从上面的API中我们可以看出,TimeStamp是能够被数值化并进行数值计算的。同时由于它是一个对象,所以不能简单地被遍历,查询或排序;但是还是可以满足我的需求的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值