Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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
在MFC先前存储的C#中正确读回时间_C#_.net_Mfc_Timezone_Timezone Offset - Fatal编程技术网

在MFC先前存储的C#中正确读回时间

在MFC先前存储的C#中正确读回时间,c#,.net,mfc,timezone,timezone-offset,C#,.net,Mfc,Timezone,Timezone Offset,上面的代码是我如何写入数据库和从数据库中读取的 在MFC环境中,一切正常 问题是,该程序正在一台US机器上运行,运行日期为15-05-2013 08:11:23(日间时区)。因此,它将该日期保存为1368601883,保存在一个文本文件中 然而,当我试图用C代码读取相同的1368601883值时,我希望收到15-05-2013 08:11:23,但我得到的是15-05-2013 07:11:23。差1小时 我如何在C#中处理这种情况。您能发布代码以便在C#中阅读吗?我怀疑这是一个时区问题..公共

上面的代码是我如何写入数据库和从数据库中读取的 在MFC环境中,一切正常

问题是,该程序正在一台US机器上运行,运行日期为
15-05-2013 08:11:23
(日间时区)。因此,它将该日期保存为1368601883,保存在一个文本文件中

然而,当我试图用C代码读取相同的
1368601883
值时,我希望收到
15-05-2013 08:11:23
,但我得到的是
15-05-2013 07:11:23
。差1小时


我如何在C#中处理这种情况。

您能发布代码以便在C#中阅读吗?我怀疑这是一个时区问题..公共静态日期时间转换器到日期时间(长刻度){TimeSpan=TimeSpan.FromTicks(刻度*TimeSpan.TicksPerSecond);返回新的日期时间(1970,1,1)。添加(span);}嘿,我明白了。。我犯了一个错误。我像这样重写了我的C代码。公共静态日期时间转换器ToLocalDateTime(长刻度){TimeSpan=TimeSpan.FromTicks(刻度*TimeSpan.TicksPerSecond);DateTime startTime=new DateTime(1970,1,1)。Add(span);return TimeZone.CurrentTimeZone.ToLocalTime(startTime)。AddSeconds((DateTime.UtcNow.Subtract(DateTime.Now)).TotalSeconds);}你到底为什么要在你的C代码中使用MFC类型呢?而且,你在评论中发布的块真的很复杂。如果您想将unix时间戳转换为本地的
DateTime
,那么只需执行以下操作:
DateTime dt=new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc)。AddSeconds(timestampinsteonds)。ToLocalTime()
void CMFCVersionApp::writeTo()
{
    CTime m_runEndTime = CTime::GetCurrentTime().GetTime();
    CTimeSpan nTimeZoneOffset = getTimeZoneOffset();
    unsigned long valueToPushToDataBase = (unsigned long)(m_runEndTime + nTimeZoneOffset).GetTime();
    szBuffer.Format("%ld",valueToPushToDataBase);
    if ( myFile.Open( _T("c:\\test\\myfile.dat"), CFile::modeCreate | CFile::modeReadWrite) )
    {
        LPCTSTR p = szBuffer.GetBuffer(1024);
        myFile.Flush();
        myFile.Write(p, szBuffer.GetLength());
        myFile.Close();
    }
}

CTimeSpan CMFCVersionApp::getTimeZoneOffset()
{
   CTime currentTime = CTime::GetCurrentTime().GetTime();
   tm t1, t2; 
   t1 = *(currentTime.GetLocalTm(&t1));
   t2 = *(currentTime.GetGmtTm(&t2));
   CTime time1(1900+t1.tm_year, t1.tm_mon+1, t1.tm_mday, t1.tm_hour, t1.tm_min,0,0);
   CTime time2(1900+t2.tm_year, t2.tm_mon+1, t2.tm_mday, t2.tm_hour, t2.tm_min,0,0);

   CTimeSpan nTimeZoneOffset = time1 - time2;
   return nTimeZoneOffset;
}

void CMFCVersionApp::readFrom()
{
   AfxMessageBox(_T("Reading.. You may attach now"));
   unsigned long valueFromDB;



   if ( myFile.Open( _T("c:\\test\\myfile.dat"), CFile::modeRead ) )
    {
        //myFile.Flush();
        myFile.Seek( 0, CFile::begin );
        myFile.Read( ArrszBuffer, sizeof( ArrszBuffer ) ); 
        valueFromDB = atoi(ArrszBuffer);
        myFile.Close();
   }

   CTime       m_ReceiverSideEndDate = valueFromDB;     
   m_ReceiverSideEndDate-= getTimeZoneOffset(); 
   CString strValue = m_ReceiverSideEndDate.Format("%c");
   AfxMessageBox(_T(strValue));
}