time_t類型的轉換問題——不是靜態變量,但每次轉化當前時間都是相同的值


FUN()
{
……
SYSTEMTIME SystemTime ;
GetLocalTime(&SystemTime);

sprintf_s(sztime,"%d:%d:%d",SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond);
time_t tStartTime = (time_t)szStartTime;
time_t tCurrTime = (time_t) sztime;
CTimeSpan tSlideTime = tStartTime -  tCurrTime;
CString CSlideTime =tSlideTime.Format("%H:%M:%S");
……
}

每次調用這個函數時,系統時間不同,到sztime的值是正確的,但是轉換為time_t類型的tCurrTime 的值總是固定的,不變。請問下為什么?

8 个解决方案

#1


不能這么強制轉換吧
一個是數組,一個是整數

#2


用法根本不對,你得到了 那個數組的“地址!”。。。

#3


那該怎么做呀

#4



strftime 
用這個啊,這個專門用於格式化時間字符串

#5


把每次結果拷貝到字符數組中。。。

#6


你的方法是錯誤的。time_t是一個整數,一般是表示從1970年1月1日午夜經過的秒數。你不能用sprintf_s來產生它。正確的方法是填充一個tm結構(最好用localtime來初始化),然后用mktime來轉換成time_t。


  time_t rawtime;
  struct tm *timeinfo;
  int year = 2005, month = 2 ,day = 2;
  
  time ( &rawtime );    // 獲取當前時間 time_t
  timeinfo = localtime ( &rawtime );    // 用 localtime 填充 tm 結構
  timeinfo->tm_year = year - 1900;    // 年份從 1900 開始
  timeinfo->tm_mon = month - 1;  // 月份從 0 開始
  timeinfo->tm_mday = day;

  rawtime = mktime ( timeinfo );

  // mktime 會自動計算日期是否合法並進行校正,然后返回 time_t
}

#7


time_t tStartTime = (time_t)szStartTime;
time_t tCurrTime = (time_t)sztime;
CTimeSpan tSlideTime = tStartTime - tCurrTime;

我用time_t主要是為了用CTimeSpan來計算兩個時間的差值的。如果不用CTimeSpan的話該用什么?

#8


恩,兩個同類型之間的轉換肯定有錯誤,如何改看6樓

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com