sqlite中支持的时间和日期函数共有 5 个:
- date(timestring, modifier, modifier, …)
- time(timestring, modifier, modifier, …)
- datetime(timestring, modifier, modifier, …)
- julianday(timestring, modifier, modifier, …)
- 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
- NNN days
- NNN hours
- NNN minutes
- NNN.NNNN seconds
- NNN months
- NNN years
- start of month
- start of year
- start of day
- weekday N
- unixepoch
- localtime
- 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
我们有时候需要自定义日志,控制某些文章不在首页显示。
打开当前theme的index.php找出如下代码:
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
在它的前面加上一句:
<?php query_posts(’cat=-1,-2,’); ?>
里面的“1 ” “2” 换成不想显示的日志的分类ID即可,需要隐藏更多的分类,用逗号隔开。
https方式每次都要输入密码,按照如下设置,输入一次即可记住密码
设置记住密码(默认15分钟):
|
git config --global credential.helper cache |
如果想自己设置时间,可以这样做:
|
git config credential.helper 'cache --timeout=3600' |
这样就设置一个小时之后失效
长期存储密码:
|
git config --global credential.helper store |
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,成功设置标题为文章中文路径的英文翻译!
Sqlite3提供了函数
select time()
select datetime()
来获取时间和日期。不过获取出来的是世界时间。可以给函数传参数来获取本地时间:
select time(CURRENT_TIMESTAMP,'localtime');
select datetime(CURRENT_TIMESTAMP,'localtime')
Ubuntu从13.04升级到13.10后,出现Dash无法进行搜索的问题,即Dash里一片空白,输入任何字符都无法没有反应。
找到如下解决办法:
sudo apt-get install --reinstall unity-lens-* unity-scope-home
完成以后重启Ubuntu解决此问题。
封装、继承和多态是面向对象的三要素。
不良的封装会使程序变得难以开发和维护,严重的时候,甚至会破坏类的工作机制。
就如果一间房子,正常进出房间的通道就是门,房间内的东西被墙保护着,而如果你的墙被砸了一个洞,可以让人随意进出,那后果可想而知。
一个封装良好的类至少需要做到以下几点:
1.尽可能地限制类和成员的可访问性
尽可能地使用private,而不是public.
2.不要公开暴露成员变量
暴露成员变量会破坏类的封装性,从而限制对抽象的控制能力。
例如Point类
1 class Point
2 {
3 public:
4 int x;
5 int y;
6 long color;
7 }
这么做破坏了其封装性。使用者可以随意地使用类里的数据,而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 }
1 void Point::SetX(int x)
2 {
3 if(x < 0)
4 m_lcolor = 0xFF0000;
5
6 m_nx = x;
7 }
这样的封装才是合理且安全的,外部不知道,也不需要知道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.避免使用友元类
除非很必要的场合,一般情况下尽量避免使用友元类,它对封装会造成破坏,使代码量提升,并大大增加了维护的难度