Получение числового часового пояса в указанном формате - PullRequest
1 голос
/ 19 августа 2011

Я хотел бы напечатать текущее время как 2011-08-18 10:11:12 -07:00.Я разработал фрагмент кода, как показано ниже:

#include <iostream>

using namespace std;

void time_to_string(time_t clock,const char *fmtstr )
{
    char buf[256];
    if (strftime(buf, 256, fmtstr, localtime(&clock)) == 0)
        buf[0] = 0;
    cout << buf << endl;
}

int main()
{
        time_to_string(time(NULL), "%Y-%m-%d %H%M%S %z");
}

Я могу отображать время как 2011-08-18 10:11:12 -0700, но не как 2011-08-18 10:11:12 -07:00.Использование "%Y-%m-%d %H%M%S %:z" приводит к 2011-08-18 10:11:12 %:z.

Как мне выполнить вышеупомянутую задачу в C / C ++.

Ответы [ 4 ]

3 голосов
/ 19 августа 2011

Вам придется вручную разбить строку, которая форматируется %z как +hhmm или -hhmm.%z имеет фиксированный формат.Посмотрите на описание strftime .

Заменено смещением от UTC в стандартном формате ISO 8601: 2000 (+ hhmm или -hhmm) или без символов, если нетчасовой пояс можно определить.

Построить одну строку с датой и временем.Создайте вторую строку со смещением от UTC с помощью %z, вставьте : во вторую строку.Объединить первую и вторую строку.

1 голос
/ 19 августа 2011

Синтаксис, который вы пробовали, не существует.

Я бы вызвал функцию дважды: один раз с "%Y-%m-%d %H%M%S " и один раз с "%z", вручную добавьте : во вторую строку и затем объедините их.

Чтобы вставить :, вы можете выполнить некрасивую манипуляцию с буфером:

buf2[5]=buf2[4];
buf2[4]=buf2[3];
buf2[3]=':';

strcat(buf,buf2);

Обратите внимание, что макет вряд ли изменится для этих конкретных данных, поэтому он не так безобразен.

0r, если вы действительно любите overkill, регулярное выражение. Но вам понадобится внешняя библиотека.

1 голос
/ 19 августа 2011

Он пытается интерпретировать%: и он не соответствует спецификатору формата, поэтому он выводит его как есть.Но вы, наверное, уже знали это =)

В вашей функции time_to_string я бы вручную вставил ':' в буфер перед его отображением.

0 голосов
/ 19 августа 2011

Вы можете вручную добавить ':' в конце, изменив строку результата.например,

buf[26]='\0';
buf[25]=buf[24];
buf[24]=buf[23];
buf[23]=':';

Возможно, я пропускаю лучшее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...