Как отформатировать дату в SQLite в соответствии с текущими настройками формата локали? - PullRequest
2 голосов
/ 23 февраля 2010

Мне нужно сопоставить дату, используя оператор LIKE. Дата должна быть в локальном формате текущего пользователя, а не в общем формате.

Поэтому я использую функцию strftime так:

WHERE strftime('%d.%m.%Y %H:%M', createdDate, 'localtime') LIKE '%{searchTerm}%'

К сожалению, это работает только для фиксированного формата "% d.% M.% Y% H:% M". Но я хочу использовать текущий языковой формат пользователя.

Так что мне нужно либо: 1) Получить строку формата strftime из объекта языка C ++ 2) Сделать форматирование даты в SQLite, используя саму текущую локаль

Потратил уже несколько часов на это безрезультатно. Буду признателен, если кто-нибудь укажет мне правильное решение этой проблемы.

Пример: Учитывая, что текущим языком является немецкий, я хочу получить что-то вроде "% d.% M.% Y% H:% m" Для локали в США я хочу получить «% m /% d /% Y% H:% m»

Ответы [ 2 ]

1 голос
/ 25 февраля 2010

Обычно локальный формат даты может быть получен с помощью Windows GetDateFormat API (или GetDateFormatEx API для Vista). Ваша программа может запросить API, а затем соответственно преобразовать дату. После этого дата может быть записана в SQLite.

Однако, однажды может возникнуть вопрос о правильности хранения временных меток в определенном формате. Это в основном означает много кода для манипулирования каждой датой или вообще никакой манипуляции с датой. Могу ли я предложить, если это возможно, сохранить в простом формате (например, метку времени ISO или UNIX) и, исходя из этого, вывести с любым видом GetDateFormat?

0 голосов
/ 27 февраля 2010

ОК, другой ответ.

Предположим, у вас есть MyTable:

CREATE TABLE MyTable (
    MyPrimaryKeyHnd INTEGER PRIMARY KEY,
    ...
    CreatedDate TEXT);

(Где CreatedDate в формате ISO. Полагаю, вы также можете использовать метку времени Unix. Ваш выбор.)

Затем список возможных форматов

CREATE TABLE TimeFormat (
    TimeFormatHnd INTEGER PRIMARY KEY,
    TimeFormatString TEXT NOT NULL,
    TimeFormatDescriptor TEXT);

Вы позволяете своему пользователю выбирать формат по своему выбору и сохраняете его в отдельной таблице или INI-файле. TimeformatString будет вашей strftime() совместимой строкой формата (например, «% d.% M.% Y% H:% M»). Вам просто нужно создать свой запрос с любым выбором пользователя.

...