2011-11-29 5 views
5

पर अंकगणित प्रदर्शन करने के लिए मेरे पास SYSTEMTIME में एक समय मान का प्रतिनिधित्व किया गया है, मैं इसे 1 घंटे जोड़ना/घटाना चाहता हूं और नई प्राप्त प्रणाली प्राप्त करना चाहता हूं। मैं चाहता हूं कि रूपांतरण को अतिरिक्त/घटाव या महीने में परिवर्तन या ई 1 वर्ष परिवर्तन पर तिथि परिवर्तन का ख्याल रखना चाहिए।SYSTEMTIME

किसी ने मुझे इस के साथ मदद कर सकते हैं, अगर वहाँ कुछ Windows API जो SYSTEMTIME

+1

आप कौन-सी भाषा का उपयोग कर रहे ? और SYSTEMTIME द्वारा आपका क्या मतलब है? –

+0

@ मार्को क्षमा करें मुझे देर हो चुकी है .. और हाँ thanxx आदमी यह मेरे लिए ठीक काम करता है – Peter

उत्तर

10

आप सी # उपयोग कर रहे हैं (या VB.NET, या ASP.NET) पर गणित करता है आप

DateTime dt = DateTime.Now.AddHours(1); 
उपयोग कर सकते हैं

आप घटाना ऋणात्मक संख्याओं का उपयोग कर सकते हैं:

DateTime dt = DateTime.Now.AddHours(-1); 

संपादित: मैंसे एक asnwer निकालने

वे FILETIME है, जो एक अवधि के बाद टिक की एक संख्या है SYSTEMTIME परिवर्तित करने का सुझाव देते हैं। इसके बाद आप अपना समय इंगित करने के लिए 'ticks' (यानी 100ns अंतराल) की आवश्यक संख्या जोड़ सकते हैं, और SYSTEMTIME पर वापस कनवर्ट कर सकते हैं।

ULARGE_INTEGER संरचना क्वाडपार्ट सदस्य के साथ एक संघ है, जो एक 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)

+0

मैं विंडोज सिस्टम सिस्टम संरचना का उपयोग कर रहा हूँ – Peter

+0

@ पीटर: ठीक है, लेकिन आप किस प्रोग्रामिंग भाषा का उपयोग कर रहे हैं? – Marco

+0

@ पीटर: मेरे संपादित उत्तर – Marco

5

जोड़ने के लिए हस्ताक्षर किए सेकंड (आगे या पीछे समय में) को जोड़ने के लिए 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); 
} 
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); 
} 
संबंधित मुद्दे