私はSYSTEMTIMEで表される時間値を持っていますが、そこから1時間を加算/減算し、新しく取得したSYSTEMTIMEを取得したいと思います。私は、変換が加減算または月の変更またはe1の年の変更の日付の変更を処理する必要があります。あなたはC#(またはVB.NET、またはASP.NET)を使用している場合はSYSTEMTIME算術演算をSYSTEMTIMEで実行する
5
A
答えて
10
上の算術演算を行い、いくつかのWindows APIが存在する場合
誰かがあなたが
DateTime dt = DateTime.Now.AddHours(1);
を使用することができますこれで私を助けることができます
あなたは減算する負の数を使用することができます。
DateTime dt = DateTime.Now.AddHours(-1);
編集: 私はからasnwerを抽出します
彼らは、エポック時から の数字のFITITIMEに変換することを提案しています。その後、必要な数の「ダニ」 (つまり100ns間隔)を追加して、あなたの時刻を示し、 SYSTEMTIMEに変換することができます。ULARGE_INTEGER構造体は、(最近のハードウェアで)直接追加できる64ビットの数値 であるQuadPartメンバーを持つ共用体です。
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;
}
あなたはC++で(前方または後方時間内)に署名秒を追加するには時間の使用SYSTEMTIME s2 = add(s1, 60*60)
5
を追加したい場合は、次の
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);
}
4
#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