如何根据当前的语言环境格式设置格式化SQLite中的日期?

时间:2010-02-23 14:22:28

标签: c++ datetime sqlite formatting locale

我需要使用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”

2 个答案:

答案 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')。您只需要根据用户的选择构建查询。

相关问题