android怎么把时间戳转换成小时

android怎么把时间戳转换成小时,第1张

mysql数据库的日期字段类型建议为varchar或者char,存入时间戳。
取出的时候,将时间戳转换为你需要的时间格式就好。
例:
假设取出值为$time
echo
date('y-m-d
h:i:s',$time);
你就会看到:2011-11-23
17:42:43的时间格式

Timestamp就是所谓的时间戳,这个主要用在数据库上,你可以再javasql这个包内找到这个类,一般数据库里如果用Date这个类的话,那你取出来的时候只能到某一天,也就是日,但是Timestamp的话,就是到小时一直到纳秒,很精确的。但是你把时间存进去的时候也要用这个类。比如:mysql的话,你可以用setTimtstamp();这个方法,你可以到java的文档里去看看,里面都写的比较清楚

1 前言
在linux 26内核中对于网络数据包中的时间戳处理和24相比有了不少变化,如果原样照搬24就要出错
了。

2 26中的tstamp
24中skb的时间戳直接就用struct timeval结构,而且使用时直接访问该参数。
26中的时间戳已经改为skb专用的时间结构struct skb_timeval:
struct sk_buff {

struct skb_timeval tstamp;

};
定义如下:
struct skb_timeval {
u32 off_sec;
u32 off_usec;
};
和24区别就是强调了参数是32位无符号数,时间是相对于一个基准时间的偏差,基准点可以自己定义,
通常还是按UNIX的缺省基准时间;而在timeval中定义的是long,在64位系统中将是64位,而且是有符
号的,时间是绝对时间,即基准点是固定的。
在 include/linux/skbuffh 中提供以下两个函数接口来获取和设置skb的时间戳:
/
skb_get_timestamp - get timestamp from a skb
@skb: skb to get stamp from
@stamp: pointer to struct timeval to store stamp in

Timestamps are stored in the skb as offsets to a base timestamp
This function converts the offset back to a struct timeval and stores
it in stamp
/
static inline void skb_get_timestamp(const struct sk_buff skb, struct timeval stamp)
{
stamp->tv_sec = skb->tstampoff_sec;
stamp->tv_usec = skb->tstampoff_usec;
}
/
skb_set_timestamp - set timestamp of a skb
@skb: skb to set stamp of
@stamp: pointer to struct timeval to get stamp from

Timestamps are stored in the skb as offsets to a base timestamp
This function converts a struct timeval to an offset and stores
it in the skb
/
static inline void skb_set_timestamp(struct sk_buff skb, const struct timeval stamp)
{
skb->tstampoff_sec = stamp->tv_sec;
skb->tstampoff_usec = stamp->tv_usec;
}

3 记录时间

24中skb的时间戳是自动记录的,获取skb后就能直接读取其进入系统的时间。
而在26中,是否记录时间戳成为可选的,大概因为很多网络应用中用不到skb的内部时间,为其赋值将
增加系统的开销,系统增加了一个静态参数netstamp_needed来控制是否记录时间戳。
/ net/core/devc /
/ When > 0 there are consumers of rx skb time stamps /
static atomic_t netstamp_needed = ATOMIC_INIT(0);
// 允许记录时间戳
void net_enable_timestamp(void)
{
atomic_inc(&netstamp_needed);
}
// 停止记录时间戳
void net_disable_timestamp(void)
{
atomic_dec(&netstamp_needed);
}
// 设置时间戳
void __net_timestamp(struct sk_buff skb)
{
struct timeval tv;
do_gettimeofday(&tv);
skb_set_timestamp(skb, &tv);
}
EXPORT_SYMBOL(__net_timestamp);

static inline void net_timestamp(struct sk_buff skb)
{
if (atomic_read(&netstamp_needed))
// 有需要时才设置时间戳
__net_timestamp(skb);
else {
// 否则时间戳值为0
skb->tstampoff_sec = 0;
skb->tstampoff_usec = 0;
}
}
在发包函数dev_queue_xmit_nit()和收包函数nettf_rx(),netif_receive_skb()中就调用了
net_timestamp()函数来设置时间戳,而缺省情况下不记录时间戳,要使系统记录时间戳必须模块中调用
net_enable_timestamp()来允许记录时间戳,模块退出时调用net_disable_timestamp()停止记录。

3 结论

对于安全设备,要识别flood、scan等攻击都要用到时间上的统计信息,所以时间戳是必须的,而如果是从24移植到26,就必须增加net_enable_timestamp()打开时间戳记录,否则将会发现时间戳都是0而使统计失败,而如果没仔细检查时间戳值的话,真是死都不知道是怎么死的。

用来表示该数据包在源机上的发出时间。
比如:TCP数据是用IP包来发送的,但是,一个TCP数据分成多个IP包,而且IP协议是无连接的,所以,当隶属于同一个TCP包的多个IP包发至目的端时,可能会与原始发送的顺序不一致,这时,就要用到时间戳来进行组装。
再如:IEEE1588中的时间戳则是用来使局域网中的一些计算机进行时间同步,以便运行一些需要时间极其精确的应用程序。一般达到ns级。

时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。

使用数字签名技术产生的数据, 签名的对象包括了原始文件信息、 签名参数、 签名时间等信息。广泛的运用在知识产权保护、 合同签字、 金融帐务、 电子报价投标、 股票交易等方面。

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

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

比如在电子合同签署的过程中,时间戳技术就是必不可少的,我们就接入了由联合信任时间戳服务中心提供的时间戳服务,为电子签名添加时间属性,有效确认合同生成的时间以及文件内容的不可篡改性。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13384571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-25
下一篇 2023-07-25

发表评论

登录后才能评论

评论列表(0条)

保存