2015-12-01 2 views
1

Так что я не видел здесь или где-либо еще, чтобы получить только месяц и минуты месяца, используя <ctime> или другую библиотеку.MM: hh: mm время с C++

Что я могу сейчас сделать, это просто получить полную текущую дату:

time_t now = time(0); 
cout<<ctime(&now); 

Есть предложения?

+0

Что вы подразумеваете под * месяцем часов и минут *? Вы хотите, чтобы время отображалось как текущий месяц: текущий час: текущая минута? – NathanOliver

+2

См. Класс шаблонов std :: time_get. –

+0

@NathanOliver «месяц: текущий час: текущая минута» - да –

ответ

2

Вы можете использовать <ctime> стандартную библиотеку так:

#include <ctime> 
#include <iostream> 

int main() 
{ 
    // get current time 
    std::time_t timer = std::time(0); 

    // convert to 'broken time' 
    std::tm bt = *std::localtime(&timer); // not thread safe 

    // extract month number from 'broken time' struct 
    std::cout << "month: " << (bt.tm_mon + 1) << '\n'; 
    std::cout << "hours: " << (bt.tm_hour) << '\n'; 
    std::cout << "mins : " << (bt.tm_min) << '\n'; 
} 

Функция std::localtime возвращает a указатель внутреннему statc структура типа std::tm.

Поскольку он возвращает указателя к внутренней структуре, что лучше всего, чтобы скопировать его в локальную версию на разыменовании указателя с помощью *:

// copy what the returned pointer points to into `bt`. 
std::tm bt = *std::localtime(&timer); 
+0

да так это работает: D. вы можете теперь объяснить эту часть 'tm bt = * std :: localtime (& timer);' или просто указать ссылку на информацию –

+0

@MisterWhite Я добавил небольшое объяснение со ссылками на соответствующие функции и структуры. – Galik

+0

например. поэтому, делая '* localtime (& timer)' мы помещаем в память 'Wed Dec 28 06:47:03 2011', а затем' tm struct' расшифровывает его так, как мы хотим? –

-1

попробовать

std::put_time("%a %b %d %H:%M:%S %Y", &now); 
+0

Я использую C++, а не c. и что такое put_time? –

+1

['std :: put_time'] (http://en.cppreference.com/w/cpp/io/manip/put_time) является C++ –

+0

Ошибка: put_time не был объявлен –

0

Если boost отлично подходит для вас попробовать это один:

boost::posix_time::to_simple_string(boost::posix_time::microsec_clock::local_time()).c_str() 
+0

Ну это полон всего –

1

Поскольку вы используете CTIME (время C) , все C вещи должны работать. Вы можете использовать strftime

char timestr[32]; 
strftime(timestr, sizeof(timestr), "%m:%H:%M", localtime(&now)); 
Смежные вопросы