Используйте единственный столбец [1] форматированного текста для хранения тегов и используйте способный механизм полнотекстового поиска для индексации этого. Еще Вы столкнетесь с масштабирующимися проблемами при попытке реализовать логические запросы.
при необходимости в деталях о тегах Вы имеете, можно или отслеживать его в инкрементно сохраняемой таблице или выполнить пакетное задание для извлечения информации.
[1] Некоторый RDBMS даже обеспечивает собственный тип массива, который мог бы еще лучше подойти для устройства хранения данных, не нуждаясь в шаге парсинга, но мог бы вызвать проблемы с полнотекстовым поиском.
Чтобы получить время, выраженное в формате UTC, используйте GetSystemTime
в Win32 API.
SYSTEMTIME st;
GetSystemTime(&st);
SYSTEMTIME
задокументировано как имеющее следующие соответствующие элементы:
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
Как подсказывает shf301 ниже GetLocalTime
(с тем же прототипом) даст время, скорректированное с учетом текущего часового пояса пользователя.
У вас есть несколько хороших ответов, в зависимости от того, что вам нужно. Если вы ищете только время суток, мой ответ - лучший подход - если вам нужны твердые даты для арифметики, подумайте о Алексе. Там'
Сначала используйте GetSystemTime ; затем, если вам это нужно, вы можете вызвать SystemTimeToFileTime в структуре SYSTEMTIME
, которую первый заполняет за вас. FILETIME
- это 64-битный счет 100-наносекционных интервалов с эпохи, поэтому он больше подходит для арифметики; a SYSTEMTIME
- это структура со всеми ожидаемыми полями (год, месяц, день, час и т. д. с точностью до миллисекунд). Если вы хотите узнать, «сколько миллисекунд прошло с полуночи», например, вычитая две структуры FILETIME
(одну для текущего времени,
В зависимости от потребностей вашего приложения существует шесть общих опций. Эта статья журнала Dr Dobbs предоставит вам всю информацию (и многое другое), необходимую для выбора лучшего.
В вашем конкретном случае из этой статьи:
GetSystemTime () извлекает текущую системное время и создает экземпляр Структура SYSTEMTIME, которая состоит из ряда отдельных поля, включая год, месяц, день, часы, минуты, секунды и миллисекунды.
Самый простой (и наиболее прямой) способ - вызвать GetSystemTimeAsFileTime ()
, который возвращает FILETIME
, структура, которая хранит 64-битное количество 100-наносекундных интервалов с полуночи 1 января 1601 года.
По крайней мере, во времена Windows NT 3.1, 3.51 и 4.01, GetSystemTimeAsFileTime ()
API был самым быстрым API пользовательского режима, способным получить текущее время. Он также предлагает преимущество (по сравнению с GetSystemTime () -> SystemTimeToFileTime ()), состоящее в том, что он является одним вызовом API, который при нормальных обстоятельствах не может дать сбой.
Чтобы преобразовать FILETIME ft_now;
в 64-битное целое число с именем ll_now
, используйте следующее:
ll_now = (LONGLONG) ft_now.dwLowDateTime + ((LONGLONG) (ft_now.dwHighDateTime) << 32LL);
Затем вы можете разделить на количество 100-наносекундных интервалов в миллисекундах (10 000 из них), и у вас будут миллисекунды с эпохи Win32.
Для преобразования в Unix эпоха, вычтите 116444736000000000LL
, чтобы получить 1 января 1970 года.
Вы упомянули о желании найти количество миллисекунд в текущем дне. Поскольку эпоха Win32 начинается в полночь, количество миллисекунд, прошедших до сих пор, можно вычислить из времени файла с помощью операции модуля. В частности, поскольку существует 24 часа / день * 60 минут / час * 60 секунд / минута * 1000 миллисекунд / секунда = 86400, 000 миллисекунд / день
, вы можете использовать модуль системного времени в миллисекундах по модулю 86400000LL
.
Для другого приложения можно не использовать модуль. Особенно, если кто-то подсчитывает прошедшее время, у него могут возникнуть трудности из-за перехода в полночь. Эти трудности разрешимы, лучший пример, который я знаю, - это строка Линуса Торвальда в ядре Linux, которая обрабатывает перенос счетчика.
Имейте в виду, что системное время возвращается как время в формате UTC (и то, и другое в случае GetSystemTimeAsFileTime ()
и просто GetSystemTime ()
). Если вам требуется местное время, настроенное администратором, вы можете использовать GetLocalTime ()
.
86400000LL
.
Для другого приложения, возможно, не захочется использовать модуль. Особенно, если кто-то подсчитывает прошедшее время, могут возникнуть трудности из-за перехода в полночь. Эти трудности разрешимы, лучший пример, который я знаю, - это строка Линуса Торвальда в ядре Linux, которая обрабатывает перенос счетчика.
Имейте в виду, что системное время возвращается как время в формате UTC (и то, и другое в случае GetSystemTimeAsFileTime ()
и просто GetSystemTime ()
). Если вам требуется местное время, настроенное администратором, вы можете использовать GetLocalTime ()
.
86400000LL
.
Для другого приложения, возможно, не захочется использовать модуль. Особенно, если кто-то подсчитывает прошедшее время, у него могут возникнуть трудности из-за перехода в полночь. Эти трудности разрешимы, лучший пример, который мне известен, - это строка Линуса Торвальда в ядре Linux, которая обрабатывает циклический перенос счетчика.
Имейте в виду, что системное время возвращается как время в формате UTC (и то, и другое в случае GetSystemTimeAsFileTime ()
и просто GetSystemTime ()
). Если вам требуется местное время, настроенное администратором, вы можете использовать GetLocalTime ()
.
Имейте в виду, что системное время возвращается как время в формате UTC (и то, и другое в случае GetSystemTimeAsFileTime ()
и просто GetSystemTime ()
). Если вам требуется местное время, настроенное администратором, вы можете использовать GetLocalTime ()
.
Имейте в виду, что системное время возвращается как время в формате UTC (и то, и другое в случае GetSystemTimeAsFileTime ()
и просто GetSystemTime ()
). Если вам требуется местное время, настроенное администратором, вы можете использовать GetLocalTime ()
.
Имейте в виду, что системное время возвращается как время в формате UTC (как в случае GetSystemTimeAsFileTime ()
, так и просто GetSystemTime ()
). Если вам требуется местное время, настроенное администратором, вы можете использовать GetLocalTime ()
.
Имейте в виду, что системное время возвращается как время в формате UTC (как в случае GetSystemTimeAsFileTime ()
, так и просто GetSystemTime ()
). Если вам требуется местное время, настроенное администратором, вы можете использовать GetLocalTime ()
.