sqlite3 时间函数

2014/05/07

sqlite中支持的时间和日期函数共有 5 个:

  1. date(timestring, modifier, modifier, …)
  2. time(timestring, modifier, modifier, …)
  3. datetime(timestring, modifier, modifier, …)
  4. julianday(timestring, modifier, modifier, …)
  5. strftime(format, timestring, modifier, modifier, …)

上述 5 个函数,都传入时间字符串 timestring 作为参数,后面接 0 到多个modifier 修饰符。 而 strftime 将 format 作为第一个参数,对时间进行重新格式化。

timestring

可以采用以下任何一种格式:

序号 时间字符串 实例
1 YYYY-MM-DD 2010-12-30
2 YYYY-MM-DD HH:MM 2010-12-30 12:10
3 YYYY-MM-DD HH:MM:SS.SSS 2010-12-30 12:10:04.100
4 MM-DD-YYYY HH:MM 30-12-2010 12:10
5 HH:MM 12:10
6 YYYY-MM-DDTHH:MM 2010-12-30 12:10
7 HH:MM:SS 12:10:01
8 YYYYMMDD HHMMSS 20101230 121001
9 now 2014-05-07

‘T’ 可以作为日期和时间的分隔符

modifier

  1. NNN days
  2. NNN hours
  3. NNN minutes
  4. NNN.NNNN seconds
  5. NNN months
  6. NNN years
  7. start of month
  8. start of year
  9. start of day
  10. weekday N
  11. unixepoch
  12. localtime
  13. utc

这些修饰符会按参数从左到右的顺序将时间进行相应的运算。

  • 前 6 个修饰符可以对时间进行加减时间段的运算。如 ‘2 days’ 表示在 timestring 的基础上再加 2 天,而 ‘-1 hours’ 表示在前时间的基础上减一个小时。
  • ‘start of’ 修饰符将时间转换成当月、当年、当天 有起始时间。如 ‘start of year’ 将时间转换为 ‘2013-01-01 00:00:00’
  • ‘weekday N’ 修饰符将当前时间前进到下一个星期N.(周日为星期0,周一为星期1).如今天是1月1日星期3,那么下一个星期4将是1月2日,下一个星期2将是1月8日。
  • ‘unixepoch’ 将 10 位数字的unix时间戳转换为相应的时间字符串。
  • ‘localtime’ 和 ‘utc’ 将时间在格林威治时间和本地时间之间进行转换

format

格式化字符串,使用’%’进行转义

  • %d 一月中的第几天,01-31
  • %f 带小数部分的秒,SS.SSS
  • %H 小时,00-23
  • %j 一年中的第几天,001-366
  • %J 儒略日数,DDDD.DDDD
  • %m 月,00-12
  • %M 分,00-59
  • %s 从 1970-01-01 算起的秒数
  • %S 秒,00-59
  • %w 一周中的第几天,0-6 (0 is Sunday)
  • %W 一年中的第几周,01-53
  • %Y 年,YYYY
  • %% % symbol

 

 

Note 1,720

wordpress 固定连接使用标题的英文翻译

2014/03/27

WordPress使用文章名做为标题有助于优化搜索。但使用中文文章名做标题又显得很丑。所幸有人提供了插件WP Slug Translate,可以将中文文章名自动翻译成英文。

下载安装此插件。在点击发布文章后,出现错误:
Fatal error: Call to undefined function curl_init() in /mnt/…../wp-
content/plugins/wp-slug-translate/wp-slug-translate.php on line 30

curl_init() 是CURL提供的函数。出现这个错误应该是curl没有安装。到服务器上查看,果然未安装CURL;
使用命令:
apt-get install php_curl
安装以后重新测试。文章标题的英文翻译成功,但是访问时出现404错误。查找原因是
1.apache默认没有加载重写模块。
2.PHP没有开启伪静态方法。
解决方案:
1.在 /etc/apache2/mods-enabled 中添加一个load文件,假如mymod.load,将需要加载的模块添加进去。这里需要添加的是mod_rewrite.so:

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

2.打开 /etc/apache2/sites-available/default

.将站点节点下的AllowOverride None 改为AllowOveride All

然后重启Apache,成功设置标题为文章中文路径的英文翻译!

 

Sqlite 如何获取系统时间

2014/03/20

Sqlite3提供了函数

select time()

select datetime()

来获取时间和日期。不过获取出来的是世界时间。可以给函数传参数来获取本地时间:

select time(CURRENT_TIMESTAMP,’localtime’);

select datetime(CURRENT_TIMESTAMP,’localtime’)

Note 1,722

Ubuntu Dash 无法搜索的问题

2014/01/13

Ubuntu从13.04升级到13.10后,出现Dash无法进行搜索的问题,即Dash里一片空白,输入任何字符都无法没有反应。

找到如下解决办法:

sudo apt-get install –reinstall unity-lens-* unity-scope-home

完成以后重启Ubuntu解决此问题。

 

 

Note 1,889

什么是良好的封装

2013/07/13

封装、继承和多态是面向对象的三要素。

不良的封装会使程序变得难以开发和维护,严重的时候,甚至会破坏类的工作机制。

就如果一间房子,正常进出房间的通道就是门,房间内的东西被墙保护着,而如果你的墙被砸了一个洞,可以让人随意进出,那后果可想而知。

一个封装良好的类至少需要做到以下几点:

1.尽可能地限制类和成员的可访问性

尽可能地使用private,而不是public.

2.不要公开暴露成员变量

暴露成员变量会破坏类的封装性,从而限制对抽象的控制能力。

例如Point类

class Point
{
public:
   int x;
   int y;
   long color;
}

 

这么做破坏了其封装性。使用者可以随意地使用类里的数据,而Point类却连成员变量何时被改变都无从知道。更严重的是,一旦需要改变该类的行为,将付出很大的代码。例如如果需要在 x<0时,color改变为红色。而下面的代码则可以轻易做到:

01 class Point
02 {
03 public:
04     int GetX();
05     void SetX(int x);
06   
07     int GetY();
08     void SetY(int y);
09   
10     long GetColor();
11 private:
12     int m_nx;
13     int m_ny;
14     long m_lcolor;
15 }

 

void Point::SetX(int x)
{
   if(x < 0)
        m_lcolor = 0xFF0000;
   
   
m_nx = x;
}

这样的封装才是合理且安全的,外部不知道,也不需要知道SetX内部是如何做的。

3.避免把私用的成员函数放到类的接口中

真正的封装,外部根本看不到任何实现细节。然而,C++等某些语言将某些细节放到了接口之中。如上面提到的Point类,虽然成员变量无法在类外被访问到,但是程序员仍然可以知道这些变量,这一点实际上是违背了封装的原则(或者C++鼓励程序员查阅实现细节?)。在《Effective C++》的第34条里,提到了解决为类问题的一个惯用技法:把类的接口与类的实现分离开,类声明中包含一个指针,指向该类的实现。

 

01 class Point
02 {
03     public:
04         int GetX();
05         void SetX(int x);
06         int GetY();
07         void SetY(int y);
08     private:
09         PointImplementation* m_pImpl;
10 }

 

4.避免使用友元类

除非很必要的场合,一般情况下尽量避免使用友元类,它对封装会造成破坏,使代码量提升,并大大增加了维护的难度

 

 

Coding 2,427

遍历窗体内所有控件

2013/06/08

MFC:

HWND hCtrl = ::GetWindow(m_hWnd,GW_CHILD);
while(hCtrl)
{
   //Do sth, like
   //CWnd* pCtrl = CWnd::FromHandle(hCtrl);

   hCtrl = ::GetWindow(hCtrl,GW_HWNDNEXT);
}

可以使用Windows API GetWindw()函数获取控件

函数原型:

HWND GetWindow( HWND hWnd, UINT uCmd );

hWnd:参考窗口句柄

uCmd:与hWnd的关系

如果存在参数指定关系的窗体,则返回句柄,否则返回NULL.

 

Note 1,503