時間戳
時間戳是指格林威治時間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;
}