2009-12-07 8 views
10

मुझे किसी तारीख को सेकंड जोड़ने की आवश्यकता है। उदाहरण के लिए, यदि मेरे पास 2009127000000 जैसी तारीख है, तो मुझे इस तारीख में सेकंड जोड़ने की आवश्यकता है। एक और उदाहरण, 200 9 1231235957 में 50 सेकंड जोड़ें।किसी तारीख को सेकंड जोड़ें

क्या यह सी में संभव है?

+0

मुझे लगता है कि अपने उदाहरण में दिनांक स्वरूप underspecified है। 200 9 -7000000 7 दिसंबर या 27 जनवरी का हो सकता है। – Thomas

+0

@ बेंजामिन, सीटाइम (दिनांक/समय रूपांतरण फ़ंक्शंस) और स्ट्रेटीम (एक समय के स्ट्रिंग प्रस्तुति को एक समय टीएम संरचना में कनवर्ट करता है) के लिए मैन पेजों का एक पठन है। – Glen

उत्तर

7

सी दिनांक/समय प्रकार time_t किसी निश्चित तिथि के बाद सेकंड की संख्या के रूप में कार्यान्वित किया जाता है, ताकि इसमें सेकंड जोड़ने के लिए आप सामान्य अंकगणितीय का उपयोग कर सकें। यदि आप यही नहीं पूछ रहे हैं तो कृपया अपना प्रश्न स्पष्ट करें।

+16

'time_t' आमतौर पर सेकंड होता है, लेकिन यह आवश्यक नहीं है। –

7

<time.h> से प्रकार और फ़ंक्शंस का उपयोग करें।

time_t now = time(0); 
time_t now_plus_50_seconds = now + 50; 
time_t now_plus_2_hours = now + 7200; 

<time.h> कार्यों कि time_t और struct tm प्रकार से निपटने की घोषणा की। ये कार्य आप जो भी चाहते हैं कर सकते हैं।

+0

उत्तर होना चाहिए। स्वच्छ, स्पष्ट, और उत्कृष्ट उदाहरण हैं। +1 – MyDaftQuestions

+0

पॉज़िक्स 2016 से '' अपडेट किया गया: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/time.h.html – pmg

19

POSIX में time_t मान सेकंड होने के लिए निर्दिष्ट है, हालांकि सी मानक द्वारा इसकी गारंटी नहीं है, इसलिए यह गैर-पॉज़िक्स सिस्टम पर सत्य नहीं हो सकता है। यह आमतौर पर है (वास्तव में, मुझे यकीन नहीं है कि यह कितनी बार सेकंड का प्रतिनिधित्व करने वाला मान नहीं है)।

#include <time.h> 
#include <stdio.h> 

int main() 
{ 
    time_t now = time(NULL); 

    struct tm now_tm = *localtime(&now); 


    struct tm then_tm = now_tm; 
    then_tm.tm_sec += 50; // add 50 seconds to the time 

    mktime(&then_tm);  // normalize it 

    printf("%s\n", asctime(&now_tm)); 
    printf("%s\n", asctime(&then_tm)); 

    return 0; 
} 

एक उपयुक्त में अपना समय स्ट्रिंग पार्स:

यहाँ समय मानों को जोड़ने का एक उदाहरण है कि स्वीकार नही करता एक time_t मानक पुस्तकालय सुविधाओं, जो वास्तव में जोड़ तोड़ समय के लिए विशेष रूप से महान नहीं हैं का उपयोग कर सेकंड का प्रतिनिधित्व करता है struct tm चर एक अभ्यास के रूप में छोड़ दिया गया है। strftime() फ़ंक्शन का उपयोग एक नया प्रारूप करने के लिए किया जा सकता है (और POSIX strptime() फ़ंक्शन पार्सिंग में सहायता कर सकता है)।

+1

संशोधित 'then_tm' से मैं' time_t' वापस कैसे प्राप्त करूं? – Lazer

+2

@ लेजर: 'mktime' आपको इच्छित' time_t 'देता है। –

+0

@ माइकल बुर। यह तभी सच होगा जब 60 सेकंड कम हो। मेरा मतलब है अन्यथा आपको पूरी गणना स्वयं करना है – abhi

1

कुछ इस तरह का प्रयास करें: (नोट: जाँच कोई त्रुटि)

include <time.h> 

char* string = ...; 
char buf[80]; 
struct tm; 
strptime(string, "%Y%m...", &tm); 
tm->tm_isdst = 0; 
strftime(buf, sizeof(buf), "%Y%m...", localtime(mktime(&tm) + 50)); 
संबंधित मुद्दे