时间戳
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。在poco中可以可以使用Timestamp类获取。
#include <Poco/Timestamp.h>
#include <iostream>int main()
{Poco::Timestamp timestamp;std::cout << "Unix timestamp: " << timestamp.epochTime() << std::endl;std::cout << "Unix timestamp (microseconds): " << timestamp.epochMicroseconds() << std::endl;return 0;
}
UTC时间与本地时间
Poco::DateTime表示日期和时间(年、月、日、小时、分钟、秒、毫秒、微秒),支持时区无关的绝对时间。Poco::LocalDateTime则是基于本地时区的日期时间表示。
#include <Poco/DateTime.h>
#include <Poco/DateTimeFormat.h>
#include <Poco/DateTimeFormatter.h>
#include <Poco/LocalDateTime.h>#include <iostream>int main() {// 获取当前时间(UTC)Poco::DateTime utcNow;std::cout << "UTC Time: " << Poco::DateTimeFormatter::format(utcNow, Poco::DateTimeFormat::ISO8601_FORMAT) << std::endl;// 本地时间Poco::LocalDateTime localNow;std::cout << "Local Time: " << Poco::DateTimeFormatter::format(localNow, "%Y-%m-%d %H:%M:%S %Z") << std::endl;// 时间计算(增加2天)Poco::DateTime future = utcNow + Poco::Timespan(2, 0, 0, 0, 0);// 时间差计算Poco::Timespan diff = future - utcNow;std::cout << "Difference: " << diff.days() << " days" << std::endl;return 0;
}
我们也可以单独的取它的每一个分量:
#include <Poco/LocalDateTime.h>#include <iostream>int main() {Poco::LocalDateTime now;std::cout << "Current year: " << now.year() << std::endl;std::cout << "Current month: " << now.month() << std::endl;std::cout << "Current day: " << now.day() << std::endl;std::cout << "Current hour: " << now.hour() << std::endl;std::cout << "Current minute: " << now.minute() << std::endl;std::cout << "Current second: " << now.second() << std::endl;std::cout << "Current millisecond: " << now.millisecond() << std::endl;std::cout << "Current microsecond: " << now.microsecond() << std::endl;std::cout << "Current timestamp: " << now.timestamp().epochTime() << std::endl;return 0;
}
时区转换
#include <Poco/DateTime.h>
#include <Poco/DateTimeFormatter.h>
#include <Poco/LocalDateTime.h>
#include <Poco/Timezone.h>#include <iostream>int main() {Poco::DateTime utcTime(2023, 10, 1, 12, 0, 0);std::cout << "UTC Time: " << utcTime.timestamp().utcTime() << std::endl;std::cout << "UTC Time (formatted): " << Poco::DateTimeFormatter::format(utcTime, "%Y-%m-%d %H:%M:%S") << std::endl;Poco::LocalDateTime localTime(Poco::Timezone::tzd(), utcTime);std::cout << "Local Time: " << Poco::DateTimeFormatter::format(localTime, "%Y-%m-%d %H:%M:%S %Z") << std::endl;return 0;
}
输出如下:
UTC Time: 139154544000000000
UTC Time (formatted): 2023-10-01 12:00:00
Local Time: 2023-10-01 20:00:00 +0800
解析时间字符串
#include <Poco/DateTime.h>
#include <Poco/DateTimeParser.h>#include <iostream>int main() {Poco::DateTime dt;int tzd;Poco::DateTimeParser::parse("%Y-%m-%dT%H:%M:%S", "2023-10-01T15:30:00", dt, tzd);std::cout << "Parsed DateTime: " << dt.year() << "-" << dt.month() << "-" << dt.day() << " " << dt.hour() << ":"<< dt.minute() << ":" << dt.second() << std::endl;std::cout << "Time Zone Differential: " << tzd << " seconds" << std::endl;return 0;
}