我有一个C++客户端与C#服务器通信,我有用户定义类型的自定义序列化.
现在我需要将日期和时间结构从C++传递给C#.谷歌搜索导致以下方法:
为了测试水域,我在(本机)C++中写了两个片段,它们执行步骤1,2,3,另一个在C#中执行Step4.没有从C++到C#的自动调用.
我手动从第3步(130220830133980000L)中取出值并在C#中使用它,这里是代码片段和我得到的输出.
C++代码
SYSTEMTIME st;
GetSystemTime(&st);
printf("\n In C++ : %04d:%02d:%02d:%02d:%02d:%02d:%03d\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
FILETIME fileTime;
if(!SystemTimeToFileTime(&st, &fileTime)) {
wcout << "Conversion from system time to file time failed. Error : " << GetLastError();
}
__int64 ticks = (((ULONGLONG) fileTime.dwHighDateTime) << 32) + fileTime.dwLowDateTime;
Run Code Online (Sandbox Code Playgroud)
C#代码
DateTime dob = new DateTime(130220830133980000L, DateTimeKind.Utc);
Console.WriteLine("In C# : " + dob.Year + ":" + dob.Month + ":" + dob.Day + ":" + dob.Hour + ":" + dob.Minute + ":" + dob.Second + ":" + dob.Millisecond);
Run Code Online (Sandbox Code Playgroud)
输出:
在C++中:2013:08:27:13:16:53:398
在C#:413:8:27:13:16:53:398
可以正确检索除年份部分之外的所有值.C++中的2013年在C#中变为413.我无法弄清楚为什么年份部分会发生变化.
我正确地进行了转换吗?如果有任何替代方法可以将日期和时间信息从C++传递到C#,反之亦然?
传递给DateTime构造函数的值是a FILETIME,即从1601年1月1日开始的100纳秒间隔的数量.DateTime构造函数所期望的值是自0001年1月1日以来经过的100纳秒间隔的数量.因此1600年的差异.您可以通过简单地应用1600年的偏移来解决您的问题.
| 归档时间: |
|
| 查看次数: |
6087 次 |
| 最近记录: |