在MFC先前存储的C#中正确读回时间
上面的代码是我如何写入数据库和从数据库中读取的 在MFC环境中,一切正常 问题是,该程序正在一台US机器上运行,运行日期为在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#中阅读吗?我怀疑这是一个时区问题..公共
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));
}