Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将System::DateTime转换为_-timeb_C#_C++_Datetime_.net 3.5 - Fatal编程技术网

C# 将System::DateTime转换为_-timeb

C# 将System::DateTime转换为_-timeb,c#,c++,datetime,.net-3.5,C#,C++,Datetime,.net 3.5,我有一个传统的基于C++的应用程序,它使用CRT ftime函数为传入的网络流量添加时间戳。_ftime函数返回一个_timeb结构,该结构具有32位和64位实现。我们使用的是32位实现,如下所示: struct _timeb { long time; // 4 bytes unsigned short millitm; // 2 bytes short timezone; // 2 bytes short dstflag

我有一个传统的基于C++的应用程序,它使用CRT ftime函数为传入的网络流量添加时间戳。_ftime函数返回一个_timeb结构,该结构具有32位和64位实现。我们使用的是32位实现,如下所示:

struct _timeb {
    long time;              // 4 bytes
    unsigned short millitm; // 2 bytes
    short timezone;         // 2 bytes
    short dstflag;          // 2 bytes
};
根据MSDN文档,以下是每个字段的解释方式:

dstflag-非零如果夏时制当前对本地时区有效,请参见_tzset以了解如何确定夏时制。 millitm-毫秒中的几分之一秒 时间-自1970年1月1日午夜00:00:00(协调世界时UTC)以来的时间(秒)。 时区-UTC和当地时间之间向西移动的分钟差。时区的值由全局变量_timezonesee _tzset的值设置。 我正在重新处理代码中的时间戳部分,以便在.NET3.5中使用C。现在使用Stask.DATETIME结构生成时间戳,但我仍然需要将它们转换回“YiTimeB”结构,以便传统C++代码可以对它们进行操作。下面是我在托管C++桥库中如何进行:

DateTime dateTime = DateTime::UtcNow;
DateTime baseTime(1970, 1, 1, 0, 0, 0, DateTimeKind::Utc);
TimeSpan delta = dateTime - baseTime;

_timeb timestamp;
timestamp.time     = delta.TotalSeconds;
timestamp.millitm  = dateTime.Millisecond;
timestamp.dstflag  = TimeZoneInfo::Local->IsDaylightSavingTime(dateTime) ? 1 : 0;
timestamp.timezone = TimeZoneInfo::Local->BaseUtcOffset.TotalMinutes * -1;
据我所知,这似乎重建了_timeb结构,就像我直接调用了_ftime一样,这很好。问题是,时间戳是我们应用程序的一个关键部分,所以这必须是正确的

我的问题有两个方面

我的算法有缺陷吗?有人看到我错过的任何明显的东西吗?是否存在边界条件,这将无法正常工作? 有没有更好的转换方法?NET有没有一种更直接的方法来实现这一点?
你知道Y2K38问题吗?我想你查过时区的标志了。避免使用dateTime的聪明。毫秒,这只会让下一个家伙感到困惑。否则看起来不错。

不用太担心Y2K38:关于dateTime.毫秒的聪明,你是什么意思?这个答案如何解决你的问题?隐马尔可夫模型