关于时间值的数据库存储-time()

网络整理 - 08-05

我想有很多人都在用date()函数来获取时间,然后在数据库中,使用datetime格式来储存,这个方法不是说比用time()函数差,只不过在PHP中使用time函数获得的是Unix时间戳,这个是很精确的时间,关于Unix时间戳,大概是这个意思,从1970年0时0分0秒开始到现在的秒数.使用它来获得的是一个INT值,储存在数据库里只要使用INT格式就可以了,方便数据库进行排序,搜索,而且比datetime格式更节省数据库空间。所以我建议大家使用time函数来获得时间。
那么如何来使用time函数呢.下面我给个例子大家就会明白了
<?php
$time=time()
/* 下面是显示怎么输出,在实际使用当中,我们只要把上面获得的时间储存在数据库中,需要显示的时候在用下面的方法来使用*/
$time=date(“y-m-d H:i:s”,$time);
//然后我们把$time当成date()函数的参数用”Y-m-d
//H:i:S”的格式来输出,这样比较方便我们查看
echo $time;
//输出的结果应该是类似2006-11-22 22:42:23的时间格式
?>

现在大家知道如何使用time()来储存时间了吧

ASP实现PHP的time方法
如果会PHP的程序员都知道,PHP的time()函数是返回当前系统的 UNIX 时间戳,这时间是以秒来表示的,即返回自从 Unix 新纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。然后可以用date()函数来取得日期的显示格式,比如说我现在用PHP的time()取得秒数为”1164075057″,我可以利用date(“Y-m-d H:i:s”,”1164075057″)来返回我们想要的显示格式,看到这里有人会问,为什么我们要以秒来显示时间呢,这就是重点,如果我们以秒来显示时间存进数据库里去,查找速度就会比直接存进时间去查找的方法快.虽然说速度也快不了多少,但数据量大的时候就能很明显的体现出来。PHP提供了如此方便的函数,那如果是ASP程序员也想用此方法怎么办?也不是完成没门,看了本文之后就能受到启发啦,大家想想因为格林威治时间是以” 1970 年 1 月 1 日 00:00:00 “开始的,ASP提供了一个叫DateDiff()的函数,这个函数可以返回一个时间差的秒,那就是说我们放进去一个格林威治标准时间与现在的时间对比一下返回秒就OK.但我们还要注意时区,我们中国是GMT+08:00:00(就是说我们中国是处于格林威治标准时区的第八区),秒返回来时就用ASP的DateAdd()函数在格林威治时间上加上读取出来的秒后返回就行了.

在C#中获取如PHP函数time()一样的时间戳
c#中没有象PHP一样的time()时间戳函数,但有DateTime.Now.Ticks用来计算时间差。

此属性的值为自 0001 年 1 月 1 日午夜 12:00 以来所经过时间以 100 毫微秒为间隔表示时的数字。
dotnet下用DateTime.Now.Ticks能够得到精确的时间,单位是10^-7s。

经过实验,发现

long a=(DateTime.Now.Ticks-aa.Ticks)/10000000-8*60*60;
tbxUrl.Text=a.ToString();

要减去8*60*60才和time()函数得到的值一样。
什么问题?刚好是8个时区产生的差别。

DateTime aa=new DateTime(1970,1,1);
MessageBox.Show(“1970   “+aa.Ticks.ToString()+”now”+DateTime.Now.Ticks.ToString());
long a=(DateTime.Now.Ticks-aa.Ticks)/10000000-8*60*60;
tbxUrl.Text=a.ToString();
同时发现c#里面DataTime有一个属性!DateTime.UtcNow已经考虑了时区问题。

ok~ 使用下面的代码即可

DateTime timeStamp=new DateTime(1970,1,1);   //得到1970年的时间戳
long a=(DateTime.UtcNow.Ticks-timeStamp.Ticks)/10000000;   //注意这里有时区问题,用now就要减掉8个小时

PS:记录这篇文章的目的,其实是想记录下面两句话,嘿嘿。

date(“Y-m-d”, 1285516800);    2010-09-27
date(“Y-m-d H:i:s”, 1285516800);  2010-09-27 00:00:00