我需要使用LIKE运算符匹配日期。日期应采用当前用户的本地格式,而不是一般格式。
所以我使用这样的strftime函数:
WHERE strftime('%d.%m.%Y %H:%M', createdDate, 'localtime') LIKE '%{searchTerm}%'
不幸的是,这仅适用于固定格式'%d。%m。%Y%H:%M'。但我想使用用户当前的语言环境格式。
所以我需要: 1)从C ++语言环境对象获取strftime格式字符串 2)使用当前语言环境本身使SQLite格式化日期
花了好几个小时才开始无济于事。 如果有人能指出我如何解决这个问题,我将不胜感激。
实施例: 鉴于当前的语言环境是德语,我希望得到类似“%d。%m。%Y%H:%m”的内容。 对于美国语言环境,我想得到“%m /%d /%Y%H:%m”
答案 0 :(得分:1)
通常情况下,可以使用Windows GetDateFormat API(或Vista的GetDateFormatEx API)获取本地日期格式。您的程序可以询问API,然后相应地转换日期。之后,日期可以记录在SQLite中。
但是,曾经可以质疑以特定格式存储时间戳的有效性。这基本上意味着很多代码来操纵每个日期,或根本没有日期操作。我是否可以建议,如果可能的话,以普通格式(比如ISO或UNIX时间戳)存储并使用它,需要输出任何类型的GetDateFormat?
答案 1 :(得分:0)
好的,不同的答案。
假设您有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')。您只需要根据用户的选择构建查询。