Как изменить этот код для отображения даты, времени с миллисекундой? [Дубликат]

Это оптимизация памяти в Java.

Чтобы сохранить в памяти, Java «повторно использует» все объекты-обертки, значения которых попадают в следующие диапазоны:

All Логические значения (true и false)

Все значения байта

Все значения символов от \ u0000 до \ u007f (т.е. от 0 до 127 в десятичной форме)

Все короткие и Целочисленные значения от -128 до 127.

Примечание:

  • , если вы создаете Boolean с новым логическим значением (значением); вы всегда будете получать новый объект
  • , если вы создадите String с новой строкой (значение); вы всегда будете получать новый объект
  • , если вы создадите Integer с новым Integer (значение); вы всегда будете получать новый объект

и т. д.

11
задан olidev 18 May 2012 в 15:13
поделиться

8 ответов

есть функция getimeofday (). возвращает время в ms, здесь: http://souptonuts.sourceforge.net/code/gettimeofday.c.html

6
ответ дан amanda 19 August 2018 в 14:48
поделиться
  • 1
    Пожалуйста, суммируйте код здесь. – hamed 12 August 2015 в 20:51
  • 2
    Ссылка не работает. – rightfold 13 July 2016 в 15:28
  • 3
    Ссылка на OK 2018-05-16. Показанный код плохо поврежден. Он состоит из 4 заголовков и int main(void) { char buffer[30]; struct timeval tv; time_t curtime; gettimeofday(&tv, NULL); curtime=tv.tv_sec; strftime(buffer,30,"%m-%d-%Y %T.",localtime(&curtime)); printf("%s%ld\n",buffer,tv.tv_usec); return 0; }. Использование %ld для форматирования микросекунд (а) не отвечает задаче вопроса о форматировании миллисекунд и (б) не печатает микросекунды точно. Когда tv_usec содержит 101 микросекунду, он печатает .101 вместо .000101. - printf("%s%.3ld\n", buffer, tv.tv_usec / 1000); – Jonathan Leffler 16 May 2018 в 14:42
#include <chrono>

typedef std::chrono::system_clock Clock;

auto now = Clock::now();
auto seconds = std::chrono::time_point_cast<std::chrono::seconds>(now);
auto fraction = now - seconds;
time_t cnow = Clock::to_time_t(now);

Затем вы можете распечатать time_t с точностью до секунд, а затем распечатать любую фракцию. Может быть миллисекунды, микросекунды или что-то еще. Чтобы конкретно получить миллисекунды:

auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(fraction);
std::cout << milliseconds.count() << '\n';
14
ответ дан bames53 19 August 2018 в 14:48
поделиться
  • 1
    Это подход C ++ 11 – linquize 11 November 2014 в 05:44
  • 2
    Насколько я могу судить, вы не можете напрямую применить duration_cast к точкам времени. – Kyle Strand 27 February 2016 в 02:01
  • 3
    @KyleStrand Ты прав. Я опубликовал исправление. – bames53 27 February 2016 в 05:31
  • 4
    Посмотрев немного больше на это, я думаю, что вы ищете time_point_cast. – Kyle Strand 27 February 2016 в 08:27

Вот еще один ответ c ++ 11:

#include <iostream>
#include <iomanip>
#include <chrono>
#ifdef WIN32
#define localtime_r(_Time, _Tm) localtime_s(_Tm, _Time)
#endif

int main()
{
    tm localTime;
    std::chrono::system_clock::time_point t = std::chrono::system_clock::now();
    time_t now = std::chrono::system_clock::to_time_t(t);
    localtime_r(&now, &localTime);

    const std::chrono::duration<double> tse = t.time_since_epoch();
    std::chrono::seconds::rep milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(tse).count() % 1000;

    std::cout << (1900 + localTime.tm_year) << '-'
        << std::setfill('0') << std::setw(2) << (localTime.tm_mon + 1) << '-'
        << std::setfill('0') << std::setw(2) << localTime.tm_mday << ' '
        << std::setfill('0') << std::setw(2) << localTime.tm_hour << ':'
        << std::setfill('0') << std::setw(2) << localTime.tm_min << ':'
        << std::setfill('0') << std::setw(2) << localTime.tm_sec << '.'
        << std::setfill('0') << std::setw(3) << milliseconds
        << std::endl;
}
3
ответ дан Chris Desjardins 19 August 2018 в 14:48
поделиться

Вы можете использовать класс boost::posix_time::ptime. Его ссылка есть .

3
ответ дан inkooboo 19 August 2018 в 14:48
поделиться
  • 1
    Я не хочу получать зависимость от библиотеки boost только из-за использования таймера – olidev 19 May 2012 в 12:20

Я лично использую этот: http://wyw.dcweb.cn/time.htm

2
ответ дан John Kaul 19 August 2018 в 14:48
поделиться

Попробуйте использовать этот код:

struct tvTime;

gettimeofday(&tvTime, NULL);

int iTotal_seconds = tvTime.tv_sec;
struct tm *ptm = localtime((const time_t *) & iTotal_seconds);

int iHour = ptm->tm_hour;;
int iMinute = ptm->tm_min;
int iSecond = ptm->tm_sec;
int iMilliSec = tvTime.tv_usec / 1000;
int iMicroSec = tvTime.tv_usec;
0
ответ дан Morales Batovski 19 August 2018 в 14:48
поделиться
  • 1
    Этот код не компилируется. Вы могли бы означать struct timeval tvTime;, который затем имеет шансы на компиляцию. – Jonathan Leffler 16 May 2018 в 14:49

В Windows с использованием Win32 API Структура SYSTEMTIME даст вам миллисекунды. Затем вы должны использовать Time Functions , чтобы получить время. Например:

#include <windows.h>

int main()
{
    SYSTEMTIME stime;
    //structure to store system time (in usual time format)
    FILETIME ltime;
    //structure to store local time (local time in 64 bits)
    FILETIME ftTimeStamp;
    char TimeStamp[256];//to store TimeStamp information
    GetSystemTimeAsFileTime(&ftTimeStamp); //Gets the current system time

    FileTimeToLocalFileTime (&ftTimeStamp,&ltime);//convert in local time and store in ltime
    FileTimeToSystemTime(&ltime,&stime);//convert in system time and store in stime

    sprintf(TimeStamp, "%d:%d:%d:%d, %d.%d.%d",stime.wHour,stime.wMinute,stime.wSecond, 
            stime.wMilliseconds, stime.wDay,stime.wMonth,stime.wYear);

    printf(TimeStamp);

    return 0;
} 
5
ответ дан SChepurin 19 August 2018 в 14:48
поделиться

под MS Visual Studio c / c ++ включают sys / timeb.h и используйте _ftime (_ftime_s). Получает структуру struct _timeb (_ftime64), содержащую структуру time_t, а также миллисекунды, см. MSDN http://msdn.microsoft.com/en-/library/z54t9z5f.aspx

#include <sys/timeb.h>

struct _timeb timebuffer;
_ftime(&timebuffer);
timebuffer.millitm; //milli seconds
timebuffer.time; //the same like struct time_t
1
ответ дан steven j 19 August 2018 в 14:48
поделиться
Другие вопросы по тегам:

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