क्या तारीख प्राप्त करने का कोई तरीका है ... अधिमानतः YYYYMMDD प्रारूप में ... ऑस्ट्रेलिया/सिडनी टाइमज़ोन में (केवल जीएमटी +11 नहीं) ..... सी ++ के माध्यम से लिनक्स?किसी अन्य टाइमज़ोन में दिनांक: लिनक्स पर सी ++
धन्यवाद,
रोजर
क्या तारीख प्राप्त करने का कोई तरीका है ... अधिमानतः YYYYMMDD प्रारूप में ... ऑस्ट्रेलिया/सिडनी टाइमज़ोन में (केवल जीएमटी +11 नहीं) ..... सी ++ के माध्यम से लिनक्स?किसी अन्य टाइमज़ोन में दिनांक: लिनक्स पर सी ++
धन्यवाद,
रोजर
हाँ, पर तुम सिर्फ मानक सी पुस्तकालय तंत्र का उपयोग करें।
एक स्ट्रिंग बनाने के द्वारा वातावरण में वांछित समय क्षेत्र सेट:
std::string tz = "TZ=Australia/Sydney";
putenv(const_cast<char *>(tz.c_str()));
tzset(); // Initialize timezone data
time_t aTime = time(NULL); // get the time - this is GMT based.
struct tm retTime;
localtime_r(aTime, &retTime); // Convert time into current timezone.
char destString[1024];
strftime(destString, 1023, "%Y%m%d %Z", &retTime); // Format the output in the local time.
std::cout << destString << std::endl;
समस्या यह है कि इस कोड को सुरक्षित थ्रेड नहीं है - एक से अधिक थ्रेड समयक्षेत्र जानकारी अच्छी तरह से अंत नहीं है बदल रहा है।
This Answer आपको बढ़ावा देने का उपयोग करने का एक तरीका देता है, जो निश्चित रूप से बहुत आसान है।
का उपयोग Boost.DateTime (चेतावनी: परीक्षण किया है, उदाहरण के प्रयोजनों के लिए ही)
// Load the timezone database
tz_database db;
// TODO: Adjust this path to your environment
db.load_from_file("./boost/libs/date_time/data/date_time_zonespec.csv");
// Get the Sydney timezone
time_zone_ptr sydney_zone = db.time_zone_from_region("Australia/Sydney");
// Current date/time in Sydney
local_date_time sydney_time = local_sec_clock::local_time(sydney_zone);
// Format sydney_time in desired format
std::ostringstream formatter;
formatter.imbue(std::locale(), new local_time_facet("%Y%m%d"));
formatter << sydney_time;
देखें:
न्यू जवाब:
इस cross platform, open source C++11/C++14 timezone library एक लिख सकते हैं का उपयोग करना:
#include "tz.h"
#include <iostream>
int
main()
{
using namespace std::chrono;
using namespace std;
using namespace date;
auto ymd = make_zoned("Australia/Sydney", system_clock::now());
cout << format("%Y%m%d", ymd) << '\n';
}
कौन सा सिर्फ मेरे लिए उत्पादन:
20150824
यह धागा सुरक्षित है। यह IANA timezone database की प्रतिलिपि के रूप में अद्यतित है जिसे आपने अभी डाउनलोड किया है। और यदि आपकी तिथि "अब" नहीं होती है, तो यह आईएएनए डेटाबेस से ऐतिहासिक डेटा का सही ढंग से उपयोग करेगी।