我有SYSTEMTIME中表示的時間值,我想從它添加/減去1小時並獲得新獲得的SYSTEMTIME。我希望轉換應該考慮加/減或日月變化或e1年變化的日期變化。在SYSTEMTIME上執行算術
有人可以幫助我,如果有一些窗口API,它確實對SYSTEMTIME
我有SYSTEMTIME中表示的時間值,我想從它添加/減去1小時並獲得新獲得的SYSTEMTIME。我希望轉換應該考慮加/減或日月變化或e1年變化的日期變化。在SYSTEMTIME上執行算術
有人可以幫助我,如果有一些窗口API,它確實對SYSTEMTIME
如果您正在使用C#(或VB.NET或ASP.NET)算術可以使用
DateTime dt = DateTime.Now.AddHours(1);
您可以使用負數減:
DateTime dt = DateTime.Now.AddHours(-1);
編輯: 我從提取asnwer
他們建議轉換SYSTEMTIME到FILETIME,這是因爲一個曆元的數的 蜱。然後,您可以添加所需數量的'記號' (即100ns間隔)以指示您的時間,並將其轉換回 SYSTEMTIME。
ULARGE_INTEGER結構是一個與QuadPart成員的聯合,它是一個64位數的 ,可以直接添加到(在最近的硬件上)。
SYSTEMTIME add(SYSTEMTIME s, double seconds) {
FILETIME f;
SystemTimeToFileTime(&s, &f);
ULARGE_INTEGER u ;
memcpy(&u , &f , sizeof(u));
const double c_dSecondsPer100nsInterval = 100. * 1.E-9;
u.QuadPart += seconds/c_dSecondsPer100nsInterval;
memcpy(&f, &u, sizeof(f));
FileTimeToSystemTime(&f, &s);
return s;
}
如果你想添加一個小時使用SYSTEMTIME s2 = add(s1, 60*60)
要添加簽署秒(向前或向後的時間)在C++:
const double clfSecondsPer100ns = 100. * 1.E-9;
void iAddSecondsToSystemTime(SYSTEMTIME* timeIn, SYSTEMTIME* timeOut, double tfSeconds)
{
union {
ULARGE_INTEGER li;
FILETIME ft;
};
// Convert timeIn to filetime
SystemTimeToFileTime(timeIn, &ft);
// Add in the seconds
li.QuadPart += tfSeconds/clfSecondsPer100ns;
// Convert back to systemtime
FileTimeToSystemTime(&ft, timeOut);
}
#include <stdio.h>
#include <windows.h>
#define NSEC 60*60
main()
{
SYSTEMTIME st;
FILETIME ft;
// Get local time from system
GetLocalTime(&st);
printf("%02d/%02d/%04d %02d:%02d:%02d\n",
st.wDay,st.wMonth,st.wYear,st.wHour,st.wMinute,st.wSecond);
// Convert to filetime
SystemTimeToFileTime(&st,&ft);
// Add NSEC seconds
((ULARGE_INTEGER *)&ft)->QuadPart +=(NSEC*10000000LLU);
// Convert back to systemtime
FileTimeToSystemTime(&ft,&st);
printf("%02d/%02d/%04d %02d:%02d:%02d\n",
st.wDay,st.wMonth,st.wYear,st.wHour,st.wMinute,st.wSecond);
}
您正在使用什麼語言? SYSTEMTIME是什麼意思? –
@Marco對不起,我遲到了..和是thanxx男人對我來說工作得很好 – Peter