Строковое представление time_t?

Вы можете просто использовать лямбду и улучшить свой существующий код следующим образом:

Comparator<Product> comparator = Comparator.comparing(p -> p.getCommentList().size()); // type 'Product' bound
List<Product> soldL = new LinkedList<>(); // type inferred '<>'
soldL.addAll(sold);
soldL.sort(comparator); // use 'List.sort'

Редактировать : вместо сравнения можно использовать comparingInt чтобы избежать бокса как:

Comparator<Product> comparator = Comparator.comparingInt(p -> p.getCommentList().size()); 
29
задан Drew Dormann 22 June 2012 в 19:07
поделиться

7 ответов

Попробуйте std::stringstream .

#include <string>
#include <sstream>

std::stringstream ss;
ss << seconds;
std::string ts = ss.str();

Хорошая обертка вокруг вышеупомянутой техники - Boost's lexical_cast :

#include <boost/lexical_cast.hpp>
#include <string>

std::string ts = boost::lexical_cast<std::string>(seconds);

И для подобных вопросов, я люблю связывать Строковые форматеры усадебного хозяйства Херба Саттера.

ОБНОВЛЕНИЕ:

В C ++ 11 используйте to_string() .

37
ответ дан Fred Larson 28 November 2019 в 01:04
поделиться

Существует множество способов форматирования времени (в зависимости от часового пояса, способа его отображения и т. Д.), Поэтому вы не можете просто неявно преобразовать time_t в строку.

Способ C состоит в том, чтобы использовать ctime или использовать strftime плюс либо местное время или gmtime .

Если вам нужен более похожий на C ++ способ выполнения преобразования, вы можете изучить библиотеку Boost.DateTime .

0
ответ дан Josh Kelley 28 November 2019 в 01:04
поделиться

Вот мой форматер - комментарии приветствуются. Этот вопрос, казалось, больше всего помог мне подать мне сообщение для тех, кто ищет то же самое.

#include <iostream>
#include "Parser.h"
#include <string>
#include <memory>
#include <ctime>
#include <chrono>
#include <iomanip>
#include <thread>

using namespace std;
string to_yyyyMMddHHmmssffffff();

string to_yyyyMMddHHmmssffffff() {
    using namespace std::chrono;
    high_resolution_clock::time_point pointInTime = high_resolution_clock::now();
    std::time_t now_c = std::chrono::system_clock::to_time_t(pointInTime);
    microseconds micros = duration_cast<microseconds>(pointInTime.time_since_epoch());
    std::size_t fractional_microseconds = micros.count() % 1'000'000;

    std:stringstream microstream;
    microstream << "00000" << fractional_microseconds;
    string formatted = microstream.str();
    int index = formatted.length() - 6;
    formatted = formatted.substr(index);
    std::stringstream dateStream;
    dateStream << std::put_time(std::localtime(&now_c), "%F %T") << "." << formatted;
    formatted = dateStream.str();

    return formatted;
}
1
ответ дан ayaio 28 November 2019 в 01:04
поделиться

В C ++ можно использовать строковый поток.

Способ C - использовать snprintf () для форматирования числа:

 char buf[16];
 snprintf(buf, 16, "%lu", time(NULL));
2
ответ дан 28 November 2019 в 01:04
поделиться

Попробуйте это, если хотите, чтобы время отображалось в читаемой строке:

#include <ctime>

std::time_t now = std::time(NULL);
std::tm * ptm = std::localtime(&now);
char buffer[32];
// Format: Mo, 15.06.2009 20:20:00
std::strftime(buffer, 32, "%a, %d.%m.%Y %H:%M:%S", ptm);  

Дополнительную информацию о strftime () можно найти на cppreference.com

28
ответ дан 28 November 2019 в 01:04
поделиться

Стандартный C ++ не имеет собственных функций времени / даты - вам нужно использовать C localtime и связанные функции.

1
ответ дан 28 November 2019 в 01:04
поделиться

функция «ctime ()» преобразует время в строку. Если вы хотите контролировать способ печати, используйте "strftime". Однако strftime () принимает аргумент "struct tm". Используйте "localtime ()" для преобразования 32-битного целого числа time_t в структуру tm.

1
ответ дан 28 November 2019 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: