在C#里如何把FILETIME转换成指定格式的时间字符串?

时间:2022-05-24 03:59:40
在C#里,如何把一个FILETIME转换成   Sun,22-Feb-2099 00:00:00 GMT   这样格式的字符串?

22 个解决方案

#1


DateTime.ToString("R")

#2


http://msdn.microsoft.com/zh-cn/library/zdtaw1bw(v=vs.110).aspx

#3


谢谢 caozhy 大人,但是如何从FILETIME类型转换到DateTime类型呢

#4


自己顶一下~~

#5


与其问人不如自己搜索下

http://msdn.microsoft.com/en-us/library/system.datetime.fromfiletime.aspx

#6


在google里面键入FILETIME to DateTime,第一条就是。

#7


谢谢 caozhy 斑竹大人的指教 在C#里如何把FILETIME转换成指定格式的时间字符串?。是我没把问题清楚,我原本的问题是这样的:

如下的一条cookies的记录,

codeID
4468-a4c8-6c9a309f5ef7
XXX.com/
1536
3806684160
31097165
718619264
30362911

3806684160和31097165是FILETIME的高位和低位,如何用这两个值合成一个FILETIME,并把这个FILETIME转换成
Sun,22-Feb-2099 00:00:00 GMT” 这样的字符串。

我目前的做法:

FILETIME ft = new FILETIME();

ft.dwHighDateTime = 3806684160;

ft.dwLowDateTime = 31097165;

ft.dwHighDateTime是int,而3806684160已经超过int32的取值区间,怎么办





#8


UInt32

#9


我试过   ft.dwHighDateTime = Convert.ToUInt32(3806684160),会报错: 无法将类型“uint”隐式转换为“int”。存在一个显式转换(是否缺少强制转换?)

因为ft.dwHighDateTime是int类型的

#10


我看了一下系统的cookies文件夹里,有大量超过了int32取值范围的cookies记录,比如

YYID
F0450298DD946C280703DE
soso.com/
1088
2861622144
32488736
3120040106
30363010


是不是要进行什么位运算之类的啊?

#11


你将dwHighDateTime定义为uint不就可以了。

#12


dwHighDateTime是FILETIME类的一个属性,是系统定义的啊,如何定义成uint呢?

#13


斑竹大人,请指教~~~~

#14


该回复于2014-04-01 21:56:09被版主删除

#15


引用 12 楼 floodSahara 的回复:
dwHighDateTime是FILETIME类的一个属性,是系统定义的啊,如何定义成uint呢?

FILETIME类是你定义的,API结构体,你当然可以想怎么定义就怎么定义。

#16


小白...麻烦楼主写段代码明示...拜谢~~~~

#17


选择FILETIME,按F12。然后修改。

#18


按您说的,按f12 找到了System.Runtime.InteropServices.ComTypes.FILETIME.cs这个文件,进去,把int 改成了uint,保存。没用,FILETIME的dwHighDateTime属性还是int的。我发现System.Runtime.InteropServices.ComTypes.FILETIME.cs是在一个临时文件夹下面的,一直要vs2005一退出,这个文件马上就不见了。

#19


那只能这样
ft.dwHighDateTime = (int)(Convert.ToUInt32(3806684160) - (UInt32)0xffffffff);

#20


ft.dwHighDateTime = (int)(Convert.ToUInt32(3806684160) - (UInt32)0xffffffff) - 1;

#21



            FILETIME ft = new FILETIME();

            ft.dwHighDateTime = (int)(Convert.ToUInt32(3806684160) - (UInt32)0xffffffff) - 1;

            ft.dwLowDateTime =  31097165;

            long qwResult = (((long) ft.dwHighDateTime) << 32) + ft.dwLowDateTime;

            DateTime dt = new DateTime(qwResult);

            string dtstr = dt.ToString("R");


还是不行哇

#22


报错:滴答数必须介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之间。

#1


DateTime.ToString("R")

#2


http://msdn.microsoft.com/zh-cn/library/zdtaw1bw(v=vs.110).aspx

#3


谢谢 caozhy 大人,但是如何从FILETIME类型转换到DateTime类型呢

#4


自己顶一下~~

#5


与其问人不如自己搜索下

http://msdn.microsoft.com/en-us/library/system.datetime.fromfiletime.aspx

#6


在google里面键入FILETIME to DateTime,第一条就是。

#7


谢谢 caozhy 斑竹大人的指教 在C#里如何把FILETIME转换成指定格式的时间字符串?。是我没把问题清楚,我原本的问题是这样的:

如下的一条cookies的记录,

codeID
4468-a4c8-6c9a309f5ef7
XXX.com/
1536
3806684160
31097165
718619264
30362911

3806684160和31097165是FILETIME的高位和低位,如何用这两个值合成一个FILETIME,并把这个FILETIME转换成
Sun,22-Feb-2099 00:00:00 GMT” 这样的字符串。

我目前的做法:

FILETIME ft = new FILETIME();

ft.dwHighDateTime = 3806684160;

ft.dwLowDateTime = 31097165;

ft.dwHighDateTime是int,而3806684160已经超过int32的取值区间,怎么办





#8


UInt32

#9


我试过   ft.dwHighDateTime = Convert.ToUInt32(3806684160),会报错: 无法将类型“uint”隐式转换为“int”。存在一个显式转换(是否缺少强制转换?)

因为ft.dwHighDateTime是int类型的

#10


我看了一下系统的cookies文件夹里,有大量超过了int32取值范围的cookies记录,比如

YYID
F0450298DD946C280703DE
soso.com/
1088
2861622144
32488736
3120040106
30363010


是不是要进行什么位运算之类的啊?

#11


你将dwHighDateTime定义为uint不就可以了。

#12


dwHighDateTime是FILETIME类的一个属性,是系统定义的啊,如何定义成uint呢?

#13


斑竹大人,请指教~~~~

#14


该回复于2014-04-01 21:56:09被版主删除

#15


引用 12 楼 floodSahara 的回复:
dwHighDateTime是FILETIME类的一个属性,是系统定义的啊,如何定义成uint呢?

FILETIME类是你定义的,API结构体,你当然可以想怎么定义就怎么定义。

#16


小白...麻烦楼主写段代码明示...拜谢~~~~

#17


选择FILETIME,按F12。然后修改。

#18


按您说的,按f12 找到了System.Runtime.InteropServices.ComTypes.FILETIME.cs这个文件,进去,把int 改成了uint,保存。没用,FILETIME的dwHighDateTime属性还是int的。我发现System.Runtime.InteropServices.ComTypes.FILETIME.cs是在一个临时文件夹下面的,一直要vs2005一退出,这个文件马上就不见了。

#19


那只能这样
ft.dwHighDateTime = (int)(Convert.ToUInt32(3806684160) - (UInt32)0xffffffff);

#20


ft.dwHighDateTime = (int)(Convert.ToUInt32(3806684160) - (UInt32)0xffffffff) - 1;

#21



            FILETIME ft = new FILETIME();

            ft.dwHighDateTime = (int)(Convert.ToUInt32(3806684160) - (UInt32)0xffffffff) - 1;

            ft.dwLowDateTime =  31097165;

            long qwResult = (((long) ft.dwHighDateTime) << 32) + ft.dwLowDateTime;

            DateTime dt = new DateTime(qwResult);

            string dtstr = dt.ToString("R");


还是不行哇

#22


报错:滴答数必须介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之间。