How do i get the current time of a different time zone? Example, i need to know the current time in Singapore where as my system is set to PT time.
You could convert to GMT then convert to whatever time zone you want.
One implementation would be to use time
to get the current time in UTC and then manipulate the TZ
environment variable to your destination timezone. Then use localtime_r
to convert to that timezone's local time.
New answer for a very old question.
Given a C++11 or C++14 compiler, and this timezone library, the current time in Singapore is:
#include "tz.h"
#include <iostream>
int
main()
{
using namespace std::chrono;
std::cout << date::make_zoned("Asia/Singapore", system_clock::now()) << '\n';
}
which just output for me:
2015-08-19 05:25:05.453824 SGT
This gives the current local date, time and abbreviation in use. And it is based off of the <chrono>
library and the IANA timezone database.
std::chrono::system_clock::now()
returns a time stamp in the UTC timezone. This program locates the timezone information for "Asia/Singapore", and translates the UTC timestamp into a pair representing the local time and the current timezone for that location.
The above program is independent of the computer's current timezone.
In C++20 you can now do this (once your vendor ships it):
#include <chrono>
#include <iostream>
int
main()
{
using namespace std::chrono;
std::cout << zoned_time{"Asia/Singapore", system_clock::now()} << '\n';
}
Output:
2015-08-19 05:25:05.453824 SGT
Use UTC (GMT) as much as possible.
If you need to (for example) print a report that's going to another time zone, use something like SystemTimeToTzSpecificLocalTime() to localise it.