存档

作者存档

sqlite3 时间函数

2014/05/07 5,835

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

 

 

分享一大波VIM配色方案

2014/04/14 2,408

WordPress 设置分类文章在主页不显示

2014/04/14 2,439

我们有时候需要自定义日志,控制某些文章不在首页显示。

打开当前theme的index.php找出如下代码:

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>

在它的前面加上一句:

<?php query_posts(’cat=-1,-2,’); ?>

里面的“1 ” “2” 换成不想显示的日志的分类ID即可,需要隐藏更多的分类,用逗号隔开。

git 记住密码

2014/04/07 4,866

https方式每次都要输入密码,按照如下设置,输入一次即可记住密码

设置记住密码(默认15分钟):

如果想自己设置时间,可以这样做:

这样就设置一个小时之后失效

长期存储密码:

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

2014/03/27 3,200

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 6,072

Sqlite3提供了函数

select time()

select datetime()

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

select time(CURRENT_TIMESTAMP,'localtime');

select datetime(CURRENT_TIMESTAMP,'localtime')

Ubuntu Dash 无法搜索的问题

2014/01/13 6,256

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

找到如下解决办法:

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

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

 

 

什么是良好的封装

2013/07/13 7,060

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

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

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

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

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.避免使用友元类

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