Мне нужна временная метка в специальном формате для вызова API:
Даты преобразуются в миллисекунды UTC, прошедшие с 12:00:00, полночи 1 января 0001 года.
Мое первое предположение состояло в том, чтобы использовать:
auto now = std::chrono::system_clock::now();
std::cout << "millisceconds since epoch: "
<< std::chrono::duration_cast<std::chrono::milliseconds>(
now.time_since_epoch()).count()
Но, конечно, вывод - это временной интервал с эпохи UNIX Thu Jan 1 00:00:00 1970
Так что для now = "Wed Dec 12 13:30:00 2018"
он возвращает1544617800000
мс.
Как узнать, сколько миллисекунд прошло с 12:00:00 до полуночи 1 января 0001 года?
Контекст API OSISoft
Документация по OSISoft APIдля указания диапазона дат довольно странно
Числовые диапазоны запросов
Предыдущими примерами были Range Queries против строковых полей.Числовые значения> также можно искать с помощью Range Queries.
Единственными полями, которые проиндексированы как числовые поля, являются поля CreationDate и ChangeDate для соответствующих атрибутов PI Point.Для индексации этих полей> добавьте их в список атрибутов PI Point.Эту конфигурацию можно просмотреть> или изменить на странице настроек.
Эти значения даты и времени индексируются в виде числовых значений посредством преобразования: даты преобразуются в миллисекунды UTC, прошедшие с 12:00:00, полночь 1 января,0001.
В следующем примере запрос представляет собой запрос на дату последнего изменения, равную или превышающую 26 февраля, 22: 16: 50.000 (это универсальное время).Этот DateTime, после вышеупомянутого преобразования, будет представлен в виде числового значения: 63655280210000. Поэтому отправленный запрос:
https://MyServer/piwebapi/search/query?q=changedate:[63655280210000 TO *]
Из этого документа я задал этот вопроскак получить миллисекунды с 12:00:00 до полуночи 1 января 0001 года.
Я также связал Вопрос с PISquare