labchy 发布的文章

mysql 中 时间和日期函数

一、MySQL 获得当前日期时间 函数

1.1 获得当前日期+时间(date + time)函数:now()

mysql> select now();

+---------------------+
| now() |
+---------------------+
| 2008-08-08 22:20:46 |
+---------------------+

除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数:

current_timestamp()
,current_timestamp
,localtime()
,localtime
,localtimestamp -- (v4.0.6)
,localtimestamp() -- (v4.0.6)

这些日期时间函数,都等同于 now()。鉴于 now() 函数简短易记,建议总是使用 now() 来替代上面列出的函数。

1.2 获得当前日期+时间(date + time)函数:sysdate()

sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。看下面的例子就明白了:

mysql> select now(), sleep(3), now();

+---------------------+----------+---------------------+
| now() | sleep(3) | now() |
+---------------------+----------+---------------------+
| 2008-08-08 22:28:21 | 0 | 2008-08-08 22:28:21 |
+---------------------+----------+---------------------+

mysql> select sysdate(), sleep(3), sysdate();

+---------------------+----------+---------------------+
| sysdate() | sleep(3) | sysdate() |
+---------------------+----------+---------------------+
| 2008-08-08 22:28:41 | 0 | 2008-08-08 22:28:44 |
+---------------------+----------+---------------------+

可以看到,虽然中途 sleep 3 秒,但 now() 函数两次的时间值是相同的; sysdate() 函数两次得到的时间值相差 3 秒。MySQL Manual 中是这样描述 sysdate() 的:Return the time at which the function executes。

sysdate() 日期时间函数,一般情况下很少用到。

  1. 获得当前日期(date)函数:curdate()

mysql> select curdate();

+------------+
| curdate() |
+------------+
| 2008-08-08 |
+------------+

其中,下面的两个日期函数等同于 curdate():

current_date()
,current_date

  1. 获得当前时间(time)函数:curtime()

mysql> select curtime();

+-----------+
| curtime() |
+-----------+
| 22:41:30 |
+-----------+

其中,下面的两个时间函数等同于 curtime():

current_time()
,current_time

  1. 获得当前 UTC 日期时间函数:utc_date(), utc_time(), utc_timestamp()

mysql> select utc_timestamp(), utc_date(), utc_time(), now()

+---------------------+------------+------------+---------------------+
| utc_timestamp() | utc_date() | utc_time() | now() |
+---------------------+------------+------------+---------------------+
| 2008-08-08 14:47:11 | 2008-08-08 | 14:47:11 | 2008-08-08 22:47:11 |
+---------------------+------------+------------+---------------------+

因为我国位于东八时区,所以本地时间 = UTC 时间 + 8 小时。UTC 时间在业务涉及多个国家和地区的时候,非常有用。
二、MySQL 日期时间 Extract(选取) 函数。

  1. 选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒

set @dt = '2008-09-10 07:15:30.123456';

select date(@dt); -- 2008-09-10
select time(@dt); -- 07:15:30.123456
select year(@dt); -- 2008
select quarter(@dt); -- 3
select month(@dt); -- 9
select week(@dt); -- 36
select day(@dt); -- 10
select hour(@dt); -- 7
select minute(@dt); -- 15
select second(@dt); -- 30
select microsecond(@dt); -- 123456

  1. MySQL Extract() 函数,可以上面实现类似的功能:

set @dt = '2008-09-10 07:15:30.123456';

select extract(year from @dt); -- 2008
select extract(quarter from @dt); -- 3
select extract(month from @dt); -- 9
select extract(week from @dt); -- 36
select extract(day from @dt); -- 10
select extract(hour from @dt); -- 7
select extract(minute from @dt); -- 15
select extract(second from @dt); -- 30
select extract(microsecond from @dt); -- 123456

select extract(year_month from @dt); -- 200809
select extract(day_hour from @dt); -- 1007
select extract(day_minute from @dt); -- 100715
select extract(day_second from @dt); -- 10071530
select extract(day_microsecond from @dt); -- 10071530123456
select extract(hour_minute from @dt); -- 715
select extract(hour_second from @dt); -- 71530
select extract(hour_microsecond from @dt); -- 71530123456
select extract(minute_second from @dt); -- 1530
select extract(minute_microsecond from @dt); -- 1530123456
select extract(second_microsecond from @dt); -- 30123456

MySQL Extract() 函数除了没有date(),time() 的功能外,其他功能一应具全。并且还具有选取‘day_microsecond’ 等功能。注意这里不是只选取 day 和 microsecond,而是从日期的 day 部分一直选取到 microsecond 部分。够强悍的吧!

MySQL Extract() 函数唯一不好的地方在于:你需要多敲几次键盘。

  1. MySQL dayof… 函数:dayofweek(), dayofmonth(), dayofyear()

分别返回日期参数,在一周、一月、一年中的位置。

set @dt = '2008-08-08';

select dayofweek(@dt); -- 6
select dayofmonth(@dt); -- 8
select dayofyear(@dt); -- 221

日期 ‘2008-08-08′ 是一周中的第 6 天(1 = Sunday, 2 = Monday, …, 7 = Saturday);一月中的第 8 天;一年中的第 221 天。

  1. MySQL week… 函数:week(), weekofyear(), dayofweek(), weekday(), yearweek()

set @dt = '2008-08-08';

select week(@dt); -- 31
select week(@dt,3); -- 32
select weekofyear(@dt); -- 32

select dayofweek(@dt); -- 6
select weekday(@dt); -- 4

select yearweek(@dt); -- 200831

MySQL week() 函数,可以有两个参数,具体可看手册。 weekofyear() 和 week() 一样,都是计算“某天”是位于一年中的第几周。 weekofyear(@dt) 等价于 week(@dt,3)。

MySQL weekday() 函数和 dayofweek() 类似,都是返回“某天”在一周中的位置。不同点在于参考的标准, weekday:(0 = Monday, 1 = Tuesday, …, 6 = Sunday); dayofweek:(1 = Sunday, 2 = Monday, …, 7 = Saturday)

MySQL yearweek() 函数,返回 year(2008) + week 位置(31)。

  1. MySQL 返回星期和月份名称函数:dayname(), monthname()

set @dt = '2008-08-08';

select dayname(@dt); -- Friday
select monthname(@dt); -- August

思考,如何返回中文的名称呢?

  1. MySQL last_day() 函数:返回月份中的最后一天。

select last_day('2008-02-01'); -- 2008-02-29
select last_day('2008-08-08'); -- 2008-08-31

MySQL last_day() 函数非常有用,比如我想得到当前月份中有多少天,可以这样来计算:

mysql> select now(), day(last_day(now())) as days;

+---------------------+------+
| now() | days |
+---------------------+------+
| 2008-08-09 11:45:45 | 31 |
+---------------------+------+

三、MySQL 日期时间计算函数

  1. MySQL 为日期增加一个时间间隔:date_add()

set @dt = now();

select date_add(@dt, interval 1 day); -- add 1 day
select date_add(@dt, interval 1 hour); -- add 1 hour
select date_add(@dt, interval 1 minute); --
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year);

select date_add(@dt, interval -1 day); -- sub 1 day

MySQL adddate(), addtime()函数,可以用 date_add() 来替代。下面是 date_add() 实现 addtime() 功能示例:

mysql> set @dt = '2008-08-09 12:12:33';

mysql>
mysql> select date_add(@dt, interval '01:15:30' hour_second);

+------------------------------------------------+
| date_add(@dt, interval '01:15:30' hour_second) |
+------------------------------------------------+
| 2008-08-09 13:28:03 |
+------------------------------------------------+

mysql> select date_add(@dt, interval '1 01:15:30' day_second);

+-------------------------------------------------+
| date_add(@dt, interval '1 01:15:30' day_second) |
+-------------------------------------------------+
| 2008-08-10 13:28:03 |
+-------------------------------------------------+

date_add() 函数,分别为 @dt 增加了“1小时 15分 30秒” 和 “1天 1小时 15分 30秒”。建议:总是使用 date_add() 日期时间函数来替代 adddate(), addtime()。

  1. MySQL 为日期减去一个时间间隔:date_sub()

mysql> select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second);

+----------------------------------------------------------------+
| date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second) |
+----------------------------------------------------------------+
| 1997-12-30 22:58:59 |
+----------------------------------------------------------------+

MySQL date_sub() 日期时间函数 和 date_add() 用法一致,不再赘述。另外,MySQL 中还有两个函数 subdate(), subtime(),建议,用 date_sub() 来替代。

  1. MySQL 另类日期函数:period_add(P,N), period_diff(P1,P2)

函数参数“P” 的格式为“YYYYMM” 或者 “YYMM”,第二个参数“N” 表示增加或减去 N month(月)。

MySQL period_add(P,N):日期加/减去N月。

mysql> select period_add(200808,2), period_add(20080808,-2)

+----------------------+-------------------------+
| period_add(200808,2) | period_add(20080808,-2) |
+----------------------+-------------------------+
| 200810 | 20080806 |
+----------------------+-------------------------+

MySQL period_diff(P1,P2):日期 P1-P2,返回 N 个月。

mysql> select period_diff(200808, 200801);

+-----------------------------+
| period_diff(200808, 200801) |
+-----------------------------+
| 7 |
+-----------------------------+

在 MySQL 中,这两个日期函数,一般情况下很少用到。

  1. MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)

MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数。

select datediff('2008-08-08', '2008-08-01'); -- 7
select datediff('2008-08-01', '2008-08-08'); -- -7

MySQL timediff(time1,time2):两个日期相减 time1 - time2,返回 time 差值。

select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00'); -- 08:08:08
select timediff('08:08:08', '00:00:00'); -- 08:08:08

注意:timediff(time1,time2) 函数的两个参数类型必须相同。
四、MySQL 日期转换函数、时间转换函数

  1. MySQL (时间、秒)转换函数:time_to_sec(time), sec_to_time(seconds)

select time_to_sec('01:00:05'); -- 3605
select sec_to_time(3605); -- '01:00:05'

  1. MySQL (日期、天数)转换函数:to_days(date), from_days(days)

select to_days('0000-00-00'); -- 0
select to_days('2008-08-08'); -- 733627

select from_days(0); -- '0000-00-00'
select from_days(733627); -- '2008-08-08'

  1. MySQL Str to Date (字符串转换为日期)函数:str_to_date(str, format)

select str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09
select str_to_date('08/09/08' , '%m/%d/%y'); -- 2008-08-09
select str_to_date('08.09.2008', '%m.%d.%Y'); -- 2008-08-09
select str_to_date('08:09:30', '%h:%i:%s'); -- 08:09:30
select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); -- 2008-08-09 08:09:30

可以看到,str_to_date(str,format) 转换函数,可以把一些杂乱无章的字符串转换为日期格式。另外,它也可以转换为时间。“format” 可以参看 MySQL 手册。

  1. MySQL Date/Time to Str(日期/时间转换为字符串)函数:date_format(date,format), time_format(time,format)

mysql> select date_format('2008-08-08 22:23:00', '%W %M %Y');

+------------------------------------------------+
| date_format('2008-08-08 22:23:00', '%W %M %Y') |
+------------------------------------------------+
| Friday August 2008 |
+------------------------------------------------+

mysql> select date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s');

+----------------------------------------------------+
| date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s') |
+----------------------------------------------------+
| 20080808222301 |
+----------------------------------------------------+

mysql> select time_format('22:23:01', '%H.%i.%s');

+-------------------------------------+
| time_format('22:23:01', '%H.%i.%s') |
+-------------------------------------+
| 22.23.01 |
+-------------------------------------+

MySQL 日期、时间转换函数:date_format(date,format), time_format(time,format) 能够把一个日期/时间转换成各种各样的字符串格式。它是 str_to_date(str,format) 函数的 一个逆转换。

  1. MySQL 获得国家地区时间格式函数:get_format()

MySQL get_format() 语法:

get_format(date|time|datetime, 'eur'|'usa'|'jis'|'iso'|'internal'

MySQL get_format() 用法的全部示例:

select get_format(date,'usa') ; -- '%m.%d.%Y'
select get_format(date,'jis') ; -- '%Y-%m-%d'
select get_format(date,'iso') ; -- '%Y-%m-%d'
select get_format(date,'eur') ; -- '%d.%m.%Y'
select get_format(date,'internal') ; -- '%Y%m%d'
select get_format(datetime,'usa') ; -- '%Y-%m-%d %H.%i.%s'
select get_format(datetime,'jis') ; -- '%Y-%m-%d %H:%i:%s'
select get_format(datetime,'iso') ; -- '%Y-%m-%d %H:%i:%s'
select get_format(datetime,'eur') ; -- '%Y-%m-%d %H.%i.%s'
select get_format(datetime,'internal') ; -- '%Y%m%d%H%i%s'
select get_format(time,'usa') ; -- '%h:%i:%s %p'
select get_format(time,'jis') ; -- '%H:%i:%s'
select get_format(time,'iso') ; -- '%H:%i:%s'
select get_format(time,'eur') ; -- '%H.%i.%s'
select get_format(time,'internal') ; -- '%H%i%s'

MySQL get_format() 函数在实际中用到机会的比较少。

  1. MySQL 拼凑日期、时间函数:makdedate(year,dayofyear), maketime(hour,minute,second)

select makedate(2001,31); -- '2001-01-31'
select makedate(2001,32); -- '2001-02-01'

select maketime(12,15,30); -- '12:15:30'

五、MySQL 时间戳(Timestamp)函数

  1. MySQL 获得当前时间戳函数:current_timestamp, current_timestamp()

mysql> select current_timestamp, current_timestamp();

+---------------------+---------------------+
| current_timestamp | current_timestamp() |
+---------------------+---------------------+
| 2008-08-09 23:22:24 | 2008-08-09 23:22:24 |
+---------------------+---------------------+

  1. MySQL (Unix 时间戳、日期)转换函数:

unix_timestamp(),
unix_timestamp(date),
from_unixtime(unix_timestamp),
from_unixtime(unix_timestamp,format)

下面是示例:

select unix_timestamp(); -- 1218290027
select unix_timestamp('2008-08-08'); -- 1218124800
select unix_timestamp('2008-08-08 12:30:00'); -- 1218169800

select from_unixtime(1218290027); -- '2008-08-09 21:53:47'
select from_unixtime(1218124800); -- '2008-08-08 00:00:00'
select from_unixtime(1218169800); -- '2008-08-08 12:30:00'

select from_unixtime(1218169800, '%Y %D %M %h:%i:%s %x'); -- '2008 8th August 12:30:00 2008'

  1. MySQL 时间戳(timestamp)转换、增、减函数:

timestamp(date) -- date to timestamp
timestamp(dt,time) -- dt + time
timestampadd(unit,interval,datetime_expr) --
timestampdiff(unit,datetime_expr1,datetime_expr2) --

请看示例部分:

select timestamp('2008-08-08'); -- 2008-08-08 00:00:00
select timestamp('2008-08-08 08:00:00', '01:01:01'); -- 2008-08-08 09:01:01
select timestamp('2008-08-08 08:00:00', '10 01:01:01'); -- 2008-08-18 09:01:01

select timestampadd(day, 1, '2008-08-08 08:00:00'); -- 2008-08-09 08:00:00
select date_add('2008-08-08 08:00:00', interval 1 day); -- 2008-08-09 08:00:00

MySQL timestampadd() 函数类似于 date_add()。

select timestampdiff(year,'2002-05-01','2001-01-01'); -- -1
select timestampdiff(day ,'2002-05-01','2001-01-01'); -- -485
select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00'); -- -12

select datediff('2008-08-08 12:00:00', '2008-08-01 00:00:00'); -- 7

MySQL timestampdiff() 函数就比 datediff() 功能强多了,datediff() 只能计算两个日期(date)之间相差的天数。
六、MySQL 时区(timezone)转换函数

convert_tz(dt,from_tz,to_tz)

select convert_tz('2008-08-08 12:00:00', '+08:00', '+00:00'); -- 2008-08-08 04:00:00

时区转换也可以通过 date_add, date_sub, timestampadd 来实现。

select date_add('2008-08-08 12:00:00', interval -8 hour); -- 2008-08-08 04:00:00
select date_sub('2008-08-08 12:00:00', interval 8 hour); -- 2008-08-08 04:00:00
select timestampadd(hour, -8, '2008-08-08 12:00:00'); -- 2008-08-08 04:00:00

ProcessMaker 概念

原文在这,有些不好理解,翻译为简体,ProcessMaker实际上是比较适合中国人使用的工作流引擎,工作流引擎的比较将来结合使用经验会有个比较,计划将ProcessMaker结合进Thinkphp。

学习ProcessMaker的第一步,是了解ProcessMaker中使用到的一些名词。基本上,ProcessMaker是与BPMN相容的,许多定义也是与BPMN标准相同,若您使用过BPMN相容的流程工具,下面很多名词与观念应该可以很容易了解。

一 流程定义(Process)

一个流程(Process),可对应到一个业务流程,是一些工作阶段(Task)的集合,这些工作阶段有一个或多个输入与输出,流程的输出可能是一个有形的物品或服务

二 流程实例(Case)

一个桉件(Case),是流程定义的一个实例,一个商业桉件(Business Case)可以说是一个进行中的工作(Word in Progress)。一个桉件就是执行一个流程的过程。一个桉件从开始到结束都使用相同的桉件编号。

三 流程实例变量(Case Variables)

桉件变数是ProcessMaker桉件执行过程中存放资讯的特殊变数,只有在桉件执行的过程中才有效。在动态输入表格(Dynaform)中的每一个栏位,如textboxes, checkboxes, dropdown boxes与grid objects等,都有一个相关的桉件变数,与该栏位名称相同,且会存放使用者在栏位中输入的值。当使用者在Dynaform中按下Submit按钮(或"下一步"连结)后,每个栏位对应的桉件变数就会被建立用来存放输入的值。

四 节点定义(Task)

一个关卡(Task)是一系列有相同目的的工作步骤(Steps)的组合。而关卡的集合形成一个流程。一个关卡(Task)与一个活动(activity)有点不同,一个活动(activity)是一个关卡(Task)的实例。关卡相对与活动就类似流程相对于桉件。 关卡与流程是定义,活动与桉件是实例(实际进行的工作)。

五 动态表格-节点视图(Dynaform)

Dynaform也称为Dynamic Forms,是在ProcessMaker中设计客製的输入表格,用来在桉件执行过程中与使用者互动的界面。Dynaform让使用者以图形化的界面查看与输入资料,在设计上,对任何使用者应该要直觉好用。

六 业务表单(Master Dynaform)

主动态表格用来呈现单笔记录,栏位预设是垂直排列的。 主动态表格是独立的表格,不可以嵌入到其它的表格中。

七 框格(Grid)

框格表格(Grid Form)用来呈现多笔记录,每一笔记录的栏位以水平方向排列,一笔记录一列。Grid form也可以使用特殊的彙整功能,如合计(sum)来进行特定栏位的加总计算。

八 插件(Plugin)

插件用来增加ProcessMaker额外的功能,或客製化界面与资料库。

九 流程图(Process Map)

流程图是商业流程各工作阶段与引导法则(如上个工作阶段到下个工作阶段的条件)的视觉表示法. Admin可以直接从流程图增加新的或修改现有的桉件与引导法则。

十 权限(Permissions)

赋予使用者或群组存取ProcessMaker特定元件(如文件,Dashboard, Case Notes)的法则(rule)。

十一 流程权限(Process Permissions)

流程权限用来给予使与者或群组对桉件或桉件中的物件(如DynaForms, Input Documents and Output Documents)唯读的权限 . 预设只有流程指定的使用者可以开启相关个桉. 为了允许其他使用者可以看到(但不能变更)桉件中的资料, 可以指定流程权限 给这些使用者. 流程权限也提供进阶的控制功能,设定其他使用者可以查看的是某些特定关卡的资讯.

十二 流程总管(Process Supervisor)

一个流程的流程总管有权检视该流程所有的桉件(Cases)。 通常一个组织的经理或部门主管会被指定为某个流程的总管。流程总管可以给定所有个桉读与写的权限。

十三 角色(Roles)

角色包含对ProcessMaker中特定范围,特定功能的权限。基本上ProcessMaker包含三种角色 PROCESSMAKER_ADMIN, PROCESSMAKER_MANAGER和PROCESSMAKER_OPERATOR, 这些角色可以设定存取 ADMIN 选单, Users tab等功能的权限.

十四 步骤(Steps)

一个步骤(Steps)是一个清楚定义的动作(action)。可能是人工的动作或自动化的动作。 一个关卡(Task)由一个或多个步骤所组成。例如: 上传一份文件,填写一个Dynaform, 下载一份PDF or DOC文件。

十五 事件(Events)

流程中多数的动作是由使用者手动执行。但某些动作需要在特定的时间执行. 在ProcessMaker中, 事件(events) 就是在一个工作阶段或一系列的工作阶段开始或结束时才能执行的行动(actions) , 因此事件需要排程器cron做正确的设定. 因为事件与工作阶段的运作紧密相关, 它们只有在工作阶段尚未结束时才能执行. 如果选定的工作已经完成(或这个个桉被暂停/取消或删除),这事件就不会执行.

事件可能是传送邮件讯息或执行一个trigger. 2.0版后增加了第三个事件"条件事件", 条件事件根据特定桉件的状态来执行. 注: 事件必须从第二个关卡以后(含)才能执行。

六大困局,正在蹂躏中国智慧

从 2014 年开始,中国已经进入世界 GDP 总量超 10 万亿美元俱乐部了,这个俱乐部的成员只有两个,一个是美国,另一个就是中国。中国对此似乎不太高兴,从 GDP 总量超过日本那一年开始,就一直谦辞老二地位,说某些国际势力夸大中国 GDP 总量是个阴谋。但事实上,世界银行与国际货币基金组织的统计是根据中国国家统计局提供的数据,再按照购买力平价法计算出来的。也就是说,咱自己的数据灌水,最后导致人家计算出这个结果,怨不得别人。

第一大困局:世界工厂地位衰落,产业结构调整极难

中国这个“世界工厂”经历了2001-2010 年的十年辉煌,终于无可挽救地陷入衰落。最新报道是世界工厂的主要车间东莞出现第二波企业倒闭潮,据说去年一年左右的时间内,有不低于4000家企业关门。

世界工厂衰落的转折点是2008年,从2008年至2012年,公开的数字是,东莞有7.2万家企业被关闭。现在,以劳动密集型为特点的东莞企业大量倒闭,标志着以透支生态环境与劳工生命成本的中国经济增长模式已经走到尽头。在此之前,拉动中国经济增长的三驾马车,按照官方 说法是投资、外贸、内需,如今这三驾马车齐齐死火,今年一季度,外贸增速同比下降了15%(而11月波罗的海干散货指数更曾跌至500点以下),表明外贸这驾马车再也无法拉动中国经济增长,得另想出路。

过去20多年以来,房地产一直是带动中国经济增长的龙头产业。从前年开始,高度泡沫化的房地产业陷入停顿,虽然政府、企业努力撑住房市不让下滑,但房地产带动的几十个上下游企业却陷入全面产能过剩。比如离房地产最近的钢铁业、水泥业产能过剩高达30%左右;距离较远的地板、家具、纺织业等相关产业也严重过剩。这种产能过剩危机,被比喻成“中国经济的核威 胁”,即像核弹一样,随时可能引爆经济危机。因此,中国现在要发展“一带一路”计划,成立亚投行,向外输出过剩产能。这是另一个大话题,就此讲一点:这个计划成功率可能较低,因为纳入这计划的几十个国家,大多是主权信用不好的国家,除了中国与巴基斯坦等国的经济合作另有目标之外,中国在其他国家的投资可能会打水漂。

上述问题预示着中国经济结构调整无望。所谓经济结构调整,不是政府想调整就能够调整到位的(好比楼房,结构岂是可以随便调整的?)。早在 2005 年,广东省就开始号召腾笼换鸟,想淘汰劳动密集型产业,引进技术密集型的高科技产业。结果是笼子空了,旧鸟离笼,新鸟没能进来,目前是珠江三角洲产业空心化。

世界市场饱和,其他发展中国家进入低端制造业,中国产能过剩,房地产绑 架GDP,刺破泡沫意味着GDP大跌,谁也没有勇气。这是第一大困局。

第二大困局:庞大的失业大军。

中国是世界第一人口大国,失业问题一直是悬在中国人头上的一把剑。1960年代中国就存在严重的就业困难,当时城市年轻人大量上山下乡,能招工、参军就是好出路了。改革开放以后,中国进入世界工厂的辉煌时期,也还存在大量失业人口,比如农村过剩劳动力高达1亿多。目前世界工厂衰落,失业问题就更严重了。

长期以来,中国政府公布的城市登记失业率都不高于4.5%,这个数据不说明中国真实的失业状况。

第一,这个数据只计算了城市中去政府部门登记的人口,没有登记的不算在内;

第二,这个城市登记失业率将农村的失业者排除在外,而农村的过剩劳动力数量相当庞大。排除了这两部分人的统计数据,本身就有严重遗漏。

目前,中国失业大军由四个层次的失业者构成。

一是农村过剩劳动力,随着世界工厂的倒闭,大批农民工返乡,失业现象严重;

二是外资白领,随着大量外资撤出中国,不少原来薪资优渥的白领失去工作;

三是失业大 学 生,由于学校里要求大 学 生提供就业证明才发放毕业证,学生被迫想方设法让父母或者亲戚单位提供假的就业证明,学校提供的就业率已完全失去了意义。

四是城市中那些初、高中毕业后长期在家待业的青年,这些人,中国媒体将其称之为“啃老族”。

中国的失业者到底是多少?有两个数据可供参考。前总 理温在2010年3月出席中国发展高层论坛时公开宣布:中国失业人口有2亿。另外一个数据由原世界银行副行长林毅夫提供。今年1月林毅夫在2015冬季达沃斯论坛表示,由于工资上涨,中国将有1.24亿人的制造业岗位转移至其他发展中国家。目前中国的劳动年龄人口是9.4亿,一旦失业人口达到3亿,真实失业率相当于32%。

这么多人没有工作,意味着国家与民众之间的“面包契约”已经失灵。所谓“面包契约”的内涵是:国家让老百姓“让渡”自己的政治权利,比如选举权、新 闻 自 由、言 论 自 由、集 会自由与结社自由等,以保证让老百姓吃饱饭作交换,这就是所谓“面包契约”。如今这么多人失业,说明老百姓既未得到权利,也没能得到面包。任何一个国家,面对如此高比例的失业人口,都是个非常头痛的问题。

劳动力数量庞大,市场却饱和,同时大量机器人进入各行各业,对劳动力的总体需求下降,使就业成为第二大困局。

第三大困局:资源危机严重,对外高度依赖。

中国的环境污染是立体化的,即水(江河湖海)、陆(土地)、空(空气)全面严重污染,这方面资料很多,只谈资源危机。中国经济发展面临严峻的资源约束,无论是作为生产资料的各种矿产,还是作为生活资料的粮食,中国都对外依赖严重。

石油号称“经济的血液”,中国现在60%以上依靠进口;铁、铜、锌等各种金属矿,对外依存度也都比较高。总之,中国经济安全严重依赖外部因素。民以食为天,仅以粮食一项来说,中国农业人口占60%,但粮食自给率到2014年已经降低至87%,三大主粮如大豆、玉米、小麦都依靠进口。这个数字意味着什么?撇开因为土地污染导致的粮食污染不谈,仅就量上来说,中国有接近2亿人口的粮食依靠进口。这就使中国的粮食价格与国际市场粮价的波动连在了一起,只要有天灾人祸,比如战争等使产粮国减产,中国粮价就会上涨。

关于粮食对外依赖严重的不安全性,20多年前美国生态环境学者布朗写了篇《谁来养活中国》,提醒中国注意粮食安全,但是中国却将这个研究报告当作“反华势力抹黑中国的阴谋”,是“中国威 胁论”,大批特批,批了好几年。近几年意识到粮食安全终于成了问题,对布朗态度有改变,曾邀请他来中国演讲,但最终还是接受不了人家许多观点,于是又冷了下来。对布朗这位学者态度的冷热变化,说明在中国讲真话很不容易。

资源危机将会是长期存在的问题,即便发生新的技术革 命,大幅提升资源利用效率,资源问题也不是短期能解决的。

第四大困局:地方政府深陷债务泥潭。

地方债务危机有可能引发地方财政危机,令中央政府十分头痛。

中国的总债务规模,前年据外国投行估计,高达中国GDP总量的168%(麦肯锡全球研究所2015年5月8日公布最新报告,中国的债务总额已经达到了GDP的282%)。其中只有很少部分是个人债务,大部分是政府债务与企业债务,其中以地方政府债务居首,约有20万亿。

以前上报18万亿是少报,官员有政绩考虑。据国家发 改 委官员李铁所言,地方债务上报数(18万亿)不及实际债务的一半数额,他们在地方调研时,走了十几个城市,地方反映说只报了10%,有些报了20%、30%。上报数超过实际债务50%的几乎没有,因此这18万亿只占实际债务的30%-50%。对此,中央政府比较在意,2014年9月曾颁发“43号文”,让地方政府在2015年1月5日前将债务如实上报,暗示将由中央拿出钱来,为地方偿还部分债务。

原来担心头上乌纱不稳,对债务尽量瞒 报少报的地方政府看到了希望,“诚实”上报,海南省还公示债务,结果是地方债务瞬间爆发式增长。财政部一看各地上报的数额,发现这“父爱主义”不能发挥,只好于今年1月下旬再度下发文件,宣布上报不合格,打回重报,还是限定在原来的20万亿左右。

现在的办法是,地方政府上报的20万亿债务,部分由中央政府埋单,部分由市场承担,剩余部分由地方政府、省政府承担。通俗一点解释,就是地方政府赖帐,如果引发群体性 事件,省里象征性地承担一些以平息事件。

由于地方政府除土地之外,没找到新的生财之道,这个巨大的债务泥潭,令中央政府头疼。

中央政府与地方政府如何进行新的利益分配?地方政府已经毫无筹码,中央政府会让步吗?这是第四大困局。

第五大困局:金融危机。

导致金融危机的因素除了债务危机之外,还有正在升高的坏帐率,以及超发货币形成的巨大流动性过剩。

先谈银行坏帐。目前出现的是改革以来,由房地产烂帐引起的第三次坏帐高峰。第一次坏帐高峰是在朱时代,从1998年开始,中国处理最初剥离的1700亿美元用了长达六年以上的时间。但是“前清后欠”,清理了部分旧的坏帐,又形成了更多的新的坏帐,使中国银行海外上市受到严重阻滞。中国政府干脆采用了一个“聪明”办法,成立四家国有资产管理公司,将这些不良资产即坏帐“剥离”后划到这些公司的帐面上,不影响银 行 帐面观瞻。其中部分不良资产打包卖给了外国投资公司——外国公司为什么要买不良资产?那是因为中国金融系统的运作当时对它们来说是个谜,想通过购买不良资产摸清中国金融系统的运作情况。

第二次危机是在温时代,银行坏帐又积攒了8000多亿美元。为了到美国上市,能够通过美国证券市场的“萨奥法案”(全称Sarbanes-Oxley Act,简称SOX法案,美国国会2002年7月通过),中国不得不雇请好几家声誉很好的美国评估机构帮助审计,如安永、普华永道等。当时美国证监会主 席是美国资深政治家考克斯,对中国没有什么好感,把关很严。这些美国评估机构在审计中发现中国银行系统的状况太糟糕,估计很难通过,建议这些银行到香港上市,不以华尔街为目标。中国邀请十几家外国银行如瑞银、Citibank、美国银行、新加坡淡马锡等到中国银行做“战略性投资者”,允许其合约期满后退出。有了这些合作伙伴做包装,中国四大银行在香港和中国A股市场上市后卖得很好。这几只大旗舰一上市,曾占A股总市值一半以上,吸纳了不少资金,外国银行赚到盆满钵满,2007年后陆续退出。中国政府处理银行坏帐的本事,让外国同行目瞪口呆。

2008年美国金融危机发生后,欧美各国艰难应对,即使是美国,最后也不得不让百年老银行雷曼兄弟破产。面对此情,《华尔街日报》有位专栏作者想起中国政府处理银行坏帐的“高招”,写了一篇调侃文章《党支部空降华尔街》,称应该请中国来处理华尔街的金融危机,成立资产公司,剥离银行坏帐,让坏帐在银行与公司之间的帐户上转了几次后就消失得无影无踪。

再来谈中国的货币超发问题。近30年的中国经济增长,其中一个重要手段就是依靠超发货币。这些年来,中国成了世界第一大印钞机。2003-2013年的10 年间,基础货币增加88万亿元人民币,外汇资产增加了3.4万亿美元。

在投资兴盛时期,超发货币的负面效果还不明显;近两年投资减缓,结果导致国内储蓄增加,游资增多,加剧了流动性过剩困境。由于冲销工具极少,深谙中国金融情势的央行行长周小川终于筹思出一个冲销办法,这就是他于2010年11月在财新峰会提出的“池子理论”,大意是:为了应对短期投机性资本即热钱流入,要加固防洪堤;对已经进入国内的热钱,要筑好蓄水池。周小川筑的“池子”究竟是什么呢?通俗一点讲,一个是房地产,用房地产筑池子,圈住流动性。这就是中国房价节节上升,高居全世界之冠的原因。有人曾写文章,戏说北京一地的房地产变现后,其数量可以买下整个美国。

现在房地产不行了,就用股市做池子,圈住流动性,一旦股市下跌,市值蒸发,流动性就大大减少。

中国发了这么多钞票,但从基本生活用品来看,通胀率似乎不高,主要是因为消费物价指数(CPI)当中没将房地产计算进去,美国是将房地产价格计入CPI的。如果房地产价格上涨被计入CPI,中国的通胀率会相当高。

现在房地产市场下滑,就用股市做“池子”,股市的暴涨暴跌会暂时消解金融危机。这个方法比国民党发行金元券搞币制改革高明,国民党发行金元券等于是硬抢,因此国民党在遭遇政治失败、军事失败的同时还遭遇财政崩溃。而股市是让股民自己入套,输了也没法怨天尤人。不过,前几年国内《瞭望东方周刊》发表文章《红色经济学家冀朝鼎》,谈到向宋子文献币制改革之策的冀朝鼎是周 恩 来派去的卧底,在关键时刻出了这么一招,加速国民政府的垮台。

从西方金融业的角度来看,周小川很不合格,不应该用这种转嫁危机的方式消解自身危机。但从中国政府角度来看,周小川是个了不起的金融家,干了三届央行行长,驶过了许多金融业的激流险滩,在危机预期中努力推迟危机的到来。今后如何,就看他的运气了。

第六大困局:分配严重不公,贫富差距过大。

近20多年来,中国权贵资本掠夺公共财与民财几乎到了肆无忌惮的程度,造成贫富差距十分悬殊、财富过度集中的不平等状况。

北京大学中国社科调查中心曾发布一个《中国民生发展报告2014》,其中有几个数据:2012年中国家庭净财产的基尼系数达0.73,顶端1%的家庭占有全国三分之一以上的财产,底端25%的家庭拥有的财产总量仅在1%左右。这样的财富集中状态,这么高的基尼系数,放眼全球,唯此一家,连非洲最烂的国家津巴布韦都没达到这种不平等状态。因此,中国的低收入阶层,也就是穷人,几乎占人口的60%左右,一个穷人太多的社 会,一个没有上升通道的社 会,是一个充满不安定因素的社 会。

西方国家只要遇上这六大困局中的三个就会垮台就得辞职。但是中国依旧坚如磐石。不过,这些问题总是要解决,不可能长期延续下去。

近现代以来,人类社 会解决社 会困局的方法有三种:

一是马 克 思主义的,即用暴力革 命推 翻重来。在1949年之前,中国有这种推倒重来的革 命,那就是农民革 命、农民起义与共 产主义革 命。

二是帝 国 主 义的,在资本主义经济危机时期,通过战争对外扩张解决国内困局。

第三种则是凯恩斯主义方式,即加强国家干预,用提高税收、扩大赤字财政、刺激投资、增加就业,提高国民购买力等方式来解决资本主义生产过剩困局。中国实际上是计划经济下的政府管制与凯恩斯方式混用,事实证明,效果并不太好。

中国接下来会用哪一种方法解决六大困局呢?

无论是官方意识形态,还是民间价值观念,中国社 会观念都与第一种最贴近。马 克 思主义对类似中国目前这种现象的解释很简单,一切危机的根源都是绝大多数人民群众受到剥削,收入太低;少数人依赖于剥削与特权掠夺,占有了大部分社 会财富。

第二种方法显然行不通。第三种方法,已经失败了。

很显然,上述三种方法都不合适,都不灵。那么是否会有第四种方法?

VPN 工具选择,持续更新[2023-03-23更新]

由于工作原因,苦逼码农,必须翻墙,百度不仅搜不到,关键是浪费时间,多年来用了很多的VPN,有免费也有收费的,今天总结一下吧。

PC端Clash
手机端SSR

2023-03-23更新
增加备用雪云

2022-09-18更新
主力blinkload挂了
更换为草莓

2022-07-26更新
祝党百年生日快乐。

2020-11-23 更新

备用VPN
https://geckoiplc.org/register?aff=z9dkkpHM
Git地址
https://github.com/HMBSbige/ShadowsocksR-Windows/releases/tag/5.1.10

2020-06-13 更新

由于之前muncloud不稳定,现在换了blinkload,目前还算稳定

muncloud作为备选方案,aff地址为muncloud

免费篇

免费的肯定有各种问题,有WEB在线翻的,也有免费的工具,到目前为止,只有一款免费软件,是仍然在使用的,就是自由门,这个软件多年来一直在更新,每当正房各种原因挂掉之后,会用她来救急,从不干涉你的生活,只在需要的时候出现,还不要钱,还能说什么呢,只能说我的心里有你的位置。

长时间使用的还有Google GoAgent,但是随着Google的全面退出,效果也越来越差,而且配置繁琐。

有段时间 租了AWS 搭建VPN,视频或者下载基本没法用不说,主要是速度慢的不行。

空窗期也有用过bing,虽然和VPN无关,但是总比百度强那么一丢丢。

其他的免费的软件,基本没有使用价值。

收费篇

收费的基本有白鸽、云梯、红杏、FQRouter、鲨鱼、skynetg 等等。

其中体验过并真正付费的按照顺序有 红杏、云梯、skynetg,skynetg 目前在用,

其中红杏,地址是honx.in,别的是李鬼,Chrome插件,优点一是速度快且没有流量限制,虽然不怎么看视频,只是Google,但是很讨厌限制,讨厌限制,讨厌限制;二是收费最便宜,一个月十几块钱;三是使用简单且用户体验好,插件安装,登录账户,设置黑白名单即可。缺点一是同时支持两个客户端,对我来说也够了,老婆看美剧买蓝光,盗版的,基本自己在用,笔记本和台式机两个,手机不用;缺点二是售后服务不行,但是产品不错,基本不需要售后。

最怀念的也是红杏,怀念是因为已经挂了,而且年费也没有退,8月份挂的,应该是“长城”升级了,用过最满意的VPN,没有之一。

接着是云梯,年费也交了,优点一是速度快,但是有流量限制;二是价格也不贵,比红杏稍微贵点;三是客服是神一样的存在,态度非常好,而且退款很及时,红杏比较来说做的不好,不仅没有解释,而且没有退款;缺点也比较明显设置麻烦,需要客户设置VPN,也许我比较弱智吧,配了半天也弄不好,但是Iphone是可以使用的,速度也不错,我其实想的是请客服远程帮我来解决一下,但是拒绝了,产品不行,服务来凑,可以理解,但是问题终归没有解决,退款了。

目前用的是skynetg, 地址是skynetgVPN, 里面有我的邀请码,各家都一样,一是速度快,但是有流量限制,最便宜的是20G,够用但是不爽;二是使用简单,免安装;但是价格也是最贵的,20多一个月,买了一年,选的日本2节点速度最快。

skynetg在2017年4月也挂掉了,目前使用91cloud,91cloud域名更新了,优惠地址是91cloud

PS: 域名换过了

其他的收费VPN,没有深度体验,即没有真正交钱,不说将来如何如何,现在来说对我没什么吸引力,以上言论既代表作者观点,也代表本站观点,因为我是站长。

/* * @Author: your name * @Date: 2016-09-06 00:00:00 * @LastEditTime: 2020-03-17 18:29:35 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: \htdocs\usr\themes\default\footer.php */