如何在C ++中以下列格式获取日期:
SELECT
ShopOrder.OrderDate, Book.BookID, Book.title,
COUNT(ShopOrder.ShopOrderID) AS "Total number of order",
SUM (Orderline.Quantity) AS "Total quantity",
Orderline.UnitSellingPrice * Orderline.Quantity AS "Total order value",
Book.Price * OrderLine.Quantity AS "Total retail value"
FROM
ShopOrder, Publisher, Book, Orderline
WHERE
Publisher.name = 'Penguin Books'
AND ShopOrder.ShopOrderID = Orderline.ShopOrderID
AND Book.BookID = Orderline.BookID
AND Publisher.PublisherID = Book.PublisherID
ORDER BY
ShopOrder.OrderDate;
输出为2016-04-26T19:50:48Z
#include <chrono>
#include <ctime>
time_t _tm = time(NULL);
struct tm*curtime = localtime(&_tm);
当前输出为:asctime(curtime)
答案 0 :(得分:9)
Documentation是你的朋友:
std::time_t t
= std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
std::cout << std::put_time( std::localtime( &t ), "%FT%T%z" );
在我的系统中产生
2016-04-29T02:48:56+0200
答案 1 :(得分:2)
我将为我提供日历值的std::localtime
与为我提供精确方法的std::chrono
函数结合在一起。这是我的代码:
#include <ctime>
#include <chrono>
...
auto now = std::chrono::system_clock::now();
auto now_c = std::chrono::system_clock::to_time_t(now)
auto now_tm = std::localtime(&now_c);
auto now_since_epoch = now.time_since_epoch(); // since 1970
auto now_ms = std::chrono::duration_cast<std::chrono::milliseconds>(now_since_epoch).count();
std::cout << std::setfill('0') <<
std::setw(4) << now_tm->tm_year + 1900 << '-' <<
std::setw(2) << now_tm->tm_mon + 1 << '-' <<
std::setw(2) << now_tm->tm_mday << 'T' <<
std::setw(2) << now_ms % (24*60*60*1000) << ':' <<
std::setw(2) << now_ms % (60*60*1000) << ':' <<
std::setw(2) << now_ms % (60*1000) << '.' <<
std::setw(3) << now_ms % (1000);
虽然很冗长,但实际上做起来还不如strftime。
答案 2 :(得分:1)
基于@Uri的答案,该答案修复了一些错误,并以ISO8601格式的毫秒数显示了正确时区中的时间:
auto now = std::chrono::system_clock::now();
std::time_t time = std::chrono::system_clock::to_time_t(now);
std::tm* now_tm = std::localtime(&time);
long long timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count();
std::cout << std::setfill('0')
<< std::put_time(now_tm, "%FT%H:%M:")
<< std::setw(2) << (timestamp / 1000) % 60 << '.'
<< std::setw(3) << timestamp % 1000
<< std::put_time(now_tm, "%z");