今天碰到一个问题:数据库表中一个记录时间的FIELD是用time_t类型,也就是long类型存储的,需要转换为yyyy-MM-dd HH:mm:ss格式显示到界面上。
当初用time_t类型大概是为了提高存取效率,但现在却给我留了个麻烦。如果开发工具还用VC当然就简单了,有MFC的CTime类,也可以用tm等结构做转换。但问题是现在要用c#,一个我还不大会用的家伙……。
上网查了查,有个DateTime的时间类可用。值范围在0001-01-01 0:0:0 ~9999-12-31 23:59:59内(晕,人类能生存到公元9999年?)表示的也还是格林威治时间。类的构造方法中有一个刚好是用long类型做参数,我把2006-8-2 0:0:0的time_t值1154448000仍了进去。代码是这样的:
long lT = 1154448000;
DateTime date = new DateTime( lT );
date.ToLocalTime(); //从格林威治转换为本时区的时间
string strTime = dT.ToString(“yyyy-MM-dd HH:mm:ss”);
运行后一看 时间是0001-01-01 00:01:55,差了两千多年。想了想可能有两个问题:上time_t的起始时间 1970-1-1 0:0:0,这个基准时间大概得加进去;另外查了下MSDN DateTime是用 100 毫微秒为计量单位,而time_t的计量单位是秒,大概还要乘上 1后面多少0 才对。于是我改了下代码:
long lT = 1154448000;
lT *= 100000000
DateTime date = new DateTime(1970,1,1,0,0,0);
TimeSpan ts = new TimeSpan( lT );
date.AddTicks( ts );
date.ToLocalTime(); //从格林威治转换为本时区的时间
string strTime = dT.ToString(“yyyy-MM-dd HH:mm:ss”);
运行后发现时间 是1970-1-1 0:0:0,也就是说new DateTime后面的语句都白写了,郁闷。又仔细看了看AddTicks和ToLocalTime方法,是有返回值的,好吧,返回值分别都赋值给Date。再运行,呵呵,时间总算正常了。一大堆代码就实现这么个微不足道的要求,感觉很不爽,不行,得再省省。我在调试模式下把DateTime(1970,1,1,0,0,0)的long值copy出来,这就好办了。最终的实现代码是:
long lT = 1154448000;
lT = lT * 100000000 + 621355968000000000;
DateTime date = new DateTime(lT);
date = date.ToLocalTime();
string strTime = dT.ToString(“yyyy-MM-dd HH:mm:ss”);
分享到:
相关推荐
告诉你oracle中Datatime类型直接输入方法,告诉你oracle中Datatime类型直接输入方法
转换变量类型函数: 转换为字符串:Convert.ToString() 转换为数字:Convert.ToInt64(),Convert.ToInt32(),Convert.ToInt16() 是按照数字位数由长到短 转换为日期:Convert.ToDateTime() ________________________...
主要介绍了C#、.Net中把字符串(String)格式转换为DateTime类型的三种方法,本文总结了Convert.ToDateTime(string)、Convert.ToDateTime(string, IFormatProvider)、DateTime.ParseExact()三种方法,需要的朋友可以参考...
在c# / ASP.net中我们可 以通过使用DataTime这个类来获取当前的时间。通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04)、时间 (12:12:12)、日期+时间(2008-09-04 12:11:10)等。
3.用String类转换日期显示格式: String.Format( "yyyy-MM-dd ",yourDateTime); 4.用Convert方法转换日期显示格式: Convert.ToDateTime("2005-8-23").ToString ("yyMMdd",System.Globalization.DateTimeFormatInfo....
在mysql数据库中,有一个datetime类型的字段用于存储记录的日期时间值。python程序中有对应的一个datetime变量dt。 现在需要往mysql数据库中添加记录,每次添加时,将datetime型变量dt写入mysql数据库tablename表中...
在c# / ASP.net中我们可以通过使用DataTime这个类来获取当前的时间。通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04)、时间(12:12:12)、日期+时间(2008-09-04 12:11:10)等。
Mysql 与 java 的时间类型 MySql的时间类型有 Java中与之对应的时间类型 datejava.sql.Date Datetimejava.sql
简单的时间控件获取值,以及CString 和Time之间的相互转换
1.确认安装有Visual Studio或IIS,安装.net Framawork。 2.将项目导入Visual Studio或部署到IIS服务器,或者将项目拷贝到D盘,点击dotnethelloworld.sln打开项目。 3.配置CERT CODE Signature.cs中将code设置成自己...
您可能感兴趣的文章:sql语句中如何将datetime格式的日期转换为yy-mm-dd格式将WMI中的DateTime类型转换成VBS时间的函数代码LINQ字符串向datetime 转换时失败的处理方法Sql中将datetime转换成字符串的
关于sql数据类型的详细介绍,绝对经典,记得要认真看啊,对于新手来说是个不错的选择哦
1.用户模型里的生日字段有bug,当将其改为其他数据类型的字段时,就提示,不能转换成datatime类型,所以这个字段应该设置为不能修改,或只能用日期类型的控件 2.模型字段可以上下移动 3.完成升级程序,可及时升级到...
复制代码 代码如下:import datetime,timenow = time.strftime(“%Y-%m-%d %H:%M:%S”)print nownow = datetime.datetime.now()print now 2.获取上个月最后一天的日期(本月的第一天减去1天) 复制代码 代码如下:last =...
时间日期控件,已经中文化了,简单清爽~ $(".form_datetime").datetimepicker({ ... format: "•yyyy/mm/dd hh:ii:ss", todayBtn:1, todayHighlight:1, autoclose:1, pickerPosition:'bottom-left' ...
C#中常用的DataTime方法的总结,包括一些SQL的函数
datetime类型的日期转化成年月日或其他格式方法,例如DateTime.Now.ToShortTimeString() DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25 等
Android的SQLite中DateTime类型数据的存取问题
时间处理是在进行数据挖掘时很重要的一个方面,在参加比赛的...可以首先把字符串转换成一个datatime类型,然后用strftime()把datatime类型的时间转换为需要的格式 >>from datetime import datetime >>time_str = 201
price 定价 Numeric(10,2) b_author 作者 nvarchar(20) b_typeid 类型编号 int Foreign Key b_intime 入库时间 DataTime b_synopsis 图书简介 Nvarchar(500) b_state 图书状态 bit 0--借出,1--没有借出 b_photo ...