2005年10月24日

王治郅的自传《心灵独白》刚刚面世,就在美国引起强烈轰动!
书中揭示了“不归”真相,以及从“天之骄子”到“国家罪人”的心路历程。

以下是美国NBC电视台的华裔记者斯蒂夫-陈对王治郅的专访:

记者:为什么想到要写这本书?

王治郅:写作是孤独的分泌物。

记者:写这本书用了很长的时间吧?

王治郅: 我不急着写,关起门来写东西只会完全离开现实生活,
与社会脱节。只有有抑制不住的冲动时写出来的才叫文学。

记者:你在洛杉矶的生活好吗?

王治郅:
诗人顾城说:我想在大地上/画满窗子/让所有习惯黑暗的眼睛/都习惯光明。
   我说:我想在窗子上/全蒙上帷幔/让所有习惯光明的眼睛/都习惯黑暗。

正视黑暗的勇气,是对光明唯一的呼唤。缺乏这种勇气,光明只能像蜡烛一样熄灭。
缺乏这种勇气的顾城,逃到了小岛上,可耻地死去。而我生活着,挣扎着,艰辛且痛苦。

记者:那快船队呢?听说你又上了伤病名单。

王治郅:我是一个上错舞台的演员。观众都是我所陌生且厌恶的,老板却让我逗他们笑。

记者:你好象很忧郁,有借酒消愁吗?

王治郅:在一个日暮穷途的时刻,最痛苦的是血气方刚的青年。什么都尝试过了,
只剩下堕落;片刻的欢悦,并不能根除分崩离析的恐惧。

现在喝酒的人,大抵都是因为快乐,官僚和商人们以上千元一瓶的人头马豪饮。然而,这仅仅是价格的高低而已,他们跟猪圈里喝水的肥猪们没有什么区别。真正的饮者是“抽刀断水水更流,举杯消愁愁更愁”,是曹操、是刘伶、是李白、是东坡、是鲁迅、是郁达夫、是金庸古龙小说中的大侠们。酒之诞生,是源于人感情的脆弱。真正喜欢喝酒的人,在喝酒之前就已经知道酒什么也改变不了,对酒并不抱什么希望,因此永远不醉。

记者:你对中国篮协公布的“真相”有何看法?

王治郅:他们辩论的方法是以自己为中心,并不是客观分出对错真假,谁也休想辩得过他们。
对了,萨达姆又当选总统了。唯一的候选人,全票通过。 伊拉克外长阿齐兹说:“选举是公正的。”

记者:这么说,你对“真相”有异议?

王治郅:人们总是厌恶臭袜子,把它们扔到床底下去。其实,袜子有什么过错呢?臭的是自己的脚,袜子不明不白地充当了替罪羊。 历史便是这样写成的。

记者:有人说,你本来是一个好人,只是一时糊涂犯了错误。

王治郅:历来,中国人对“好人”的定义是:认认真真的生活在虚伪中的人。
从这个角度来说,我不是“好人”。

记者:你从中国的“英雄”变成“叛徒”,是否很意外呢?

王治郅: 以前,我仰慕历史上的英雄人物,现在我发现,他们被各种印刷物加工润色过,已然不是真实的他们。他们在我的面前宛如庙里的神佛,后来我发现神佛是泥塑的,心里顿时凉了。

记者:你仰慕的英雄是?

王治郅:上古我欣赏刑天,欣赏他断首后舞剑的英姿;
中古我欣赏稽康,欣赏他刑场奏《广陵散》的悲壮;
近古我欣赏李蛰,欣赏他天牢中挥刀自刎的豪迈;
近代我欣赏谭嗣同,欣赏他留下来为求一死的决绝;
现代我欣赏鲁迅,欣赏他让海婴“忘了我,好好生活”的洒脱;
当代我欣赏李敖,欣赏他稳占五百年来汉语写作前三名的骄傲。

有一天,我将欣赏我自己。

记者:姚明和你有联系吗?

王治郅:我们经常通电话,他最近写了首诗给我:


我希望你,和我一样

满腔热血,心头带伤;

要狠,狠得象狼

敢叫万夫莫当!

要傲,傲得象兰

高挂一脸秋霜。

我想,只要有一份真挚的友情在我身边,那么我内心所有的痛苦,
所有的压抑,都可以得到释放。


附:
日前,姚明在接受《纽约时报》的专访时,对王治郅“不归”事件的评价:

“如果一个国家,不懂得尊重人才,甚至强迫人才跪下,

最后就会失去人才,只剩下跪拜在地的蠢才。”

2005年10月23日

2005年09月06日

我住在海淀区,这里满大街跑的是月薪上万的小程序员儿,还有痛骂计算机专业无美
女的项目经理,他们大脑袋、厚眼镜、因熬夜而布满血丝的眼睛,因不见阳光而酷似
吸血鬼的脸,穿一个星期不洗的T-SHIRT,很有很有味道的,他们供楼不供车,他们
翻开报纸只盯住北边的楼盘,倒不是因为关心奥运村,实在是想离公司近一些。我,
衷心地喜欢着这个区。 

有女友去国贸那边应聘工作回来,一脸幸福状地向我描述,地铁站里全是帅哥,地面
上更是临风玉树站成了森林,让她的小心灵经受了一次美的洗礼,她晕乎乎地回来了
,对那些西装革履、散发名贵男用香水味道、气宇轩昂的白领男人们再三再四地概叹
:“F4那算个啥,肚里没货,只知卖相,看看人家,啊,那才叫自信来源于知识,气
质来源于财富……” 我打断她语无伦次的胡说八道,问她工作有戏没戏,她说,“
凭我的英语水平,能没戏吗?!” 

  过几日,女友去上班。再过几日,女友辞职。我问为个啥,她说,她是属于海淀
区的好市民,与朝阳区那个高级白领集居地格格不入。 

  “她们化妆都太精致,显得我象个黄脸婆,她们中午在洗手间用的是外国带回来
的化妆品,我用的是外国牌子国内生产的东西,她们早餐吃意大利浓汤和甜点,我吃
的是小笼包子跟豆浆……”女友愤愤地数落着,“非穿职业装不可,我的那十来条仔
裤算是没有用武之地了,你看看我的可怜的脚,被高跟鞋折磨得都变形了,封建社会
摧残人也不过如此了吧。靠,就这样,她们还说我搭配得不对,灰衬衫不能跟紫色外
套一起穿!” 

  我说,“这有什么关系,这跟一份好工作有什么关系?你啊,也太注重技术层面
的问题了。” “我郁闷……”女友象迷路的孩子一样:“我还是在海淀这边找工作
吧。在这儿如鱼得水,要多自在有多自在,加班也愿意,你知道吗,他们东边儿啊,
真不是人待的地方!” 

  我立马制止了她的人身攻击:“别瞎说!都是首都人民,哪儿来的种族歧视啊?
” 

  女友几乎声泪俱下地声讨:“不是我啊,是她们等级观念严重啊。你看咱们这儿
,上亿身家也穿着懒汉鞋去小馆儿吃京酱肉丝儿,谁也不怵谁,你有钱那是你的事儿
,我有技术是我的骄傲,可是东边儿,什么都攀比,连丝袜的牌子都比,那天我戴了
我奶奶给的玉镯儿,被她们笑话了个半死,什么老土啊什么没品啊,好象她们生下来
就在钻石堆里长大的,如果我稍微有个行差踏错,那就要沾污了她们的小资阵营!”
 

  我笑:“傻子,现在小资过时了,都兴BOBO了啦。” 

  “呸!什么BOBO,以为这个周末去怀柔爬山,下个周末去音乐堂,就又波西又布
尔?上班的时候照样抢单,照样勾心斗角,照样背后传谣言,不过是改成了用英语传
!算了算了,我不是那林子里的鸟儿,我还是安心在海淀做技术吧,加班累得贼死也
比跟人打交道好啊,大家都埋头干自己手头的活儿,人际关系淡如水,很舒服的,我
爱穿什么穿什么,只要活儿做得漂亮,老板照样给加薪,我是再也不去高尚区了。”
 

  于是,一场散漫悠游族向精致优雅族的伟大试探,便以失败告终。 

  现在,我的女友悠哉游哉地溜达在北四环路上,在中关村的古怪雕塑前吃三块钱
的冰淇淋蛋筒,周末时她在北大清华之间流窜,到处寻找新锐欧洲电影放映地。 

  有时候去电影学院旁边的“NASA”或者民族学院旁的“火山”蹦迪,在一群孩子
的青春狂野中,她仿佛回到了学生时代。她穿着从学院路服装市场三十块钱买回的T
-S,裹着她年轻的骄傲的身体。她素面朝天,在风里露着最真实最娇嫩的肌肤。她每
次都在地铁站给盲眼歌手几块钱,她在过街天桥上买D版DVD,她爱看周星驰爱听王菲
,她用公司名称抬头的信纸给妈妈写信说北京下雪了,她爱看樱桃小丸子却从不见人
就讲“酱紫”,她除了黑白灰三色还会穿红色碎花的厚毛衣象冬天里最漂亮的一头熊
…… 

  她不过感恩节不过复活节不过万圣节,在不是情人节的日子里收到玫瑰也很开心
,平安夜十点半上床睡觉,因为第二天还要上班。 

  她会带着笔记本电脑去北理工南门的“雕刻时光”做程序,叫一壶薰衣草茶渡过
一个略带疲惫的下午,低声跟咖啡馆里打工的女生商量,“能不能把《加州旅馆》换
成神秘园?我今天忘带耳机了……”她把三里屯留给都市里最糜烂最空泛的眼神,把
哈根达斯留给都市里没有味蕾却能言善道的巧舌,把不地道的红酒留给都市里最不规
范却感觉最好的手势. 
同学聚会的时候跟从前一样包饺子。还是最爱吃路口小馆子的羊肉门丁儿,一口气能
吃六个。人大的食堂有一道铁板牛柳最好吃,农大食堂的红烧鱼很地道,最喜欢的是
语言学院的图书馆,可以端饮料进去喝的,最满意的是地质大学的操场,公司的足球
赛都是在那里进行……那郁郁的林荫道,金子一样的笑声啊,那青春的乌发、如玉的
容颜,几个流浪歌手,几个校园诗人……让我们堕入这个梦中永不醒来。 

  凌晨一点,中关村的“永和豆浆”店里,灯火通明,加班的IT们在这里吃宵夜,
男孩子与办公室里他暗恋着的女孩子一起,就着鲜肉馄饨和一小篮儿鸡柳,说着公司
里今天的笑话,他怜惜地看着她因睡眠不足稍欠血色的脸,看着她杂乱的浓密的眉,
多想告诉她,她长得很象自己南方家乡的小妹。那些深夜里的快餐店,那些不曾丢掉
美好幻想的人们……门外,星光暗淡,远处,是沉睡的楼群,而他爱的女孩,坐在对
面心满意足地吃着滚烫的馄饨…… 

  中关村的男孩儿,不会告诉女孩子帕格尼尼的小提琴让他落泪,他会用鼠标画一
张丑丑的大头鱼送给她,他会真心地夸奖女孩子的红帽子真好看而不会指责帽子颜色
与鞋不搭配。 

  中关村的男孩儿,懂得有关等待的故事。 

  公司有很可爱的环境,因为老板的不打领带和总是不在家。她坐在前面他在后面
,早晨的阳光淡淡地斜照在他俩的桌上,她的笔架和他的显示器她的小熊杯子和他的
咖啡勺,他带着南方口音说今天堵车,她趁老板不在梳梳头,把小镜子竖在键盘上,
一道刺眼的光晃到他那儿,他在后面大呼小叫,说是妖女放出厉害武器了。 

  每天早上闻着咖啡的味儿开始在键盘上敲打,象一首诗里说的,大珠小珠落玉盘
,他靠近她在屏幕上指点时,呀,他暗恋的女孩子,传来洗发水的清香,不是名贵的
CD不是什么“夜间飞行”,那气息,象椰子和太阳的混了。 

  是的是的,我们留恋纯真朴实的年代,我们希望看到生命如麦田,麦芒微微刺手
,朴实的芳香弥漫在大地上,能醉倒所有付出过汗水的人们,那金黄色的麦浪,会让
一只狐狸想起遥远星球上的小王子…… 

  我们不愿意让脚受到皮鞋的束缚、让脖子受到领带的束缚、让心受到格调的束缚
。 

  让小资们去孜孜以求最精致最优雅的生活吧,让他们劳累不堪地跟随着地铁书摊
上的畅销指南书,一步一个脚印地上下求索高尚生活吧,让他们追随着《时尚》去买
时尚而非自己喜欢的衣服吧,让他们拧着眉头吃西餐吧,让他们在音乐厅打盹、然后
诉说他们被音乐感动得夜不能寐吧,让他们为看不懂的现代雕塑胡说八道吧,让他们
去盛赞德国的马桶法国的餐具吧,让他们去描弧形最标准的眉毛吧……他们前天是布
尔乔亚,昨天是波希米亚,今天是BOBO一族,明天是IF国际自由人,后天是谁?他们
自己也不知道,因为指南书还没有出来呢?  

2005年08月26日

     中国封建王朝的顶峰是宋朝而不是唐朝。宋朝是中国历史上经济最繁荣、科技最发达、文化最昌盛、艺术最高深、人民生活水平最富裕的朝代。宋代是为中国最争光的朝代,也是当时世界上发明创造最多的国家。宋朝也是中国为世界贡献最大的时期,中国历史上的重要发明一半以上都出现在宋朝,那时中国所谓的四大发明的三项被发明或是开始得到大规模实际的运用,火药、指南针、印刷术、纸币、垂线纺织,瓷器工艺的重要改革等。宋朝航海、造船、医药、工艺、农技等都达到了古代前所未有、后难比及的高度。宋朝还发展起一门新科学,技术科学。这些辉煌的成就与宋的综合文明有直接联系。宋代的GDP是占全球的50%。国家的综合实力无论是质量还是数量宋朝都是当时世界的第一大国。宋朝已经达到了封建王朝的顶峰,已经出现了资本主义萌芽。

  
一、宋朝的经济商业 

  宋朝是中国古代唯一长期不实行"抑商"政策的王朝。宋朝开创以来,即治坑矿、组织茶盐开发。因而大量从土地中解放出来的农民投入商业手工业中,民间经济受到刺激,突飞猛进。创造了空前的财富与繁荣。在宋朝立国之初,宋太祖赵框胤就号召人们"多积金、市田宅以遗子孙,歌儿舞女以终天年",宋太宗也曾下诏"令两制议政丰之术以闻",令官员们研究理财求富之道。宋神宗则认为"尤先理财",发过"政事之先,理财为急"的诏令。这些政策导向使商业大潮兴旺,商贸高速发展,钱庄业迅猛发展,促使宋朝在世界人类历史上第一次出现了最早的纸币和银行。银行可以贷款、异地付款。北宋时期就大量开采金、银、铜、铁、煤等矿藏,全国各地也出现了世界历史上最早的制造工厂和加工工厂。如造船厂、火器厂、造纸厂、印刷工厂、织布厂、各地的官窑等。厂里的工人按期领工资。南宋时的军器所工匠竟达七八千人。造会子局,有徒工一千二百余人。绫锦院织工达到四百余人。除公办的工厂外,一些私办的工厂也相继大量的出现与繁荣。因为经济的空前繁荣,宋钱币铸造量非常大,如宋神宗时全国年铸币506万贯。(唐朝最盛的开元盛世年铸币32万贯)。

  宋代的货币形式与种类太过丰富。铜钱、银锭是宋朝的本位货币。宋朝铜币和铁币并用,有些宋币含有合金成分。此外还有些银质钱币。宋代的钱币无论是种类、数量上还是质量上都是中国古代历史上造诣最多最好的钱币。宋币上铭刻的文字书法优美多为名家及皇帝手笔,篆隶真行草俱全,还古篆体、瘦金体。种种精美的货币使人爱不释手,宋钱币的艺术总类艺术性工艺最高。宋钱是当时周边各国最喜欢最坚挺的货币。宋钱成为南海诸国的镇国库之宝。虽然辽国、金国等国也仿制宋币造钱,但在金国流通最多最广的是宋钱。直到现在出土存世的宋钱还是最多的。在今天东到日本、西至欧洲、非洲的广大地区都有出土。足见宋的繁荣与强盛。为免携带大批铜钱来往之烦劳,在公元998年(咸平元年)前后在四川地区民间出现最早的纸币"交子"。这是我国也是世界上最早的纸币。但这种纸币只相当于担保的代币券。宋朝政府先后印刷发行的纸币种类有交子、钱引、关子、会子等几种类型形式。公元1023年(天圣元年)宋政府开设了世界上第一个负责纸币发行的官方机构"益州交子务",这是世界上最早的中央人民银行。公元1024年宋政府开始印刷发行"交子",此种"交子"铜板彩印,上面印有鸟兽、花纹、图案或故事等,异常精美。此种票据有如公债,分界发行。交子最初是以两年为一界,发行新交子的同时废止并回收旧交子,自公元1072年(熙宁五年)起,虽仍然是每两年发行一界,但是每界交子的流通期增加到四年。交子的面值为自一贯文至十贯文的固定面值,以铁钱为本,备有发行准备金,已经基本具备了近代本位货币的特征要素。其施用愈来愈广泛。票据的使用为商业繁荣提供了便利条件。北宋崇宁四年,在江北、华北地区发行了称为"钱引"的新式样的纸币,但是只印了一界就因为流通不畅不能顺利使用而停印。公元1107年(大观元年)四川交子改称钱引,交子务也改称钱引务,开始大量印刷纸钞发行,由于数量发行过大,引起了钱引的严重贬值。公元1110年(大观三年)限制发行量为天圣时的125万贯左右,对流通地区也限在铁钱行用的四川、陕西、河东地区,后又采取了受兑、停用旧钱引,增加准备金等多种方法,使钱引的价值得到恢复。南宋时期宋政府在杭州设立"行在会子务"专门管理印制"会子"。先后印造了一千文、两千文、三千文及二百文、三百文、五百文,六种面值的会子。会子以三年为"界",到期作废,逐旧造新换旧。从公元1171年到公元1240年,共发行了十八界会子。后来政府规定第十七、十八界会子可以永久流通。这是真正意义上由政府发行的纸制的纯粹钱币。纸币逐渐代替了铜钱做为主要交换媒介。商业的高速发展起到了推动作用。

  宋王朝调整了历代立法中重刑轻民的传统做法,义利并重相当重视经济立法。法规内容涉及社会经济活动的各个方面,专门设置了专卖法,如盐法,酒法,茶法等法令。宋代成为中国古代经济立法最为活跃的时期,其立法活动频繁,法规内容涉及社会经济活动的各个方面,法规的制订、实施各方面都具有前所未有的想象力。宋的经济法令,注意到了国家与经济活动者之间的利益分配关系,顺应商品经济的规律。宋朝获得庞大的财政收入是国民经济飞速发展,工商业极度繁荣,生产力水平提高的结果。丰厚的社会财力使得政府既不必求苛税于民又能保证政府收入。这就缓和了社会矛盾,进入治理国家的良性循环。宋朝的经济,尤其是第二,第三产业得到了极大的发展,人民生活水平达到了空前的高度。公元1077年,北宋税赋总收入共7070万贯,其中农业的两税2162万贯,占30%,工商税4911万贯占70%。构成国家财政收入主体的,已经不再是农业,而是工商业了,宋朝已经走出农业文明了,宋时中国的农业社会已经在开始向工商业社会那迈进了。宋朝的手工业中还出现了铜板印刷的广告。比西方资本主义印刷的广告要早三百多年。大学者苏东坡曾给一做油食老妇人做过一首广告诗,使之生意大振。宋朝还出现了最早的商标,沈括的货币流通速度论达到了现代货币理论水平。此外宋朝已出现类似现代报纸的"小报"了。世界的中国的最早的资本主义萌芽,诞生于大宋强盛的商业浪潮中。

  宋朝是中国社会市民阶级正式产生的年代,大批的手工业者、商人、小业主构成了宋朝的中产阶级。他们经济富足,又有自己独立的价值追求。市民的富裕闲暇的生活及审美趣味和生活情趣促成了宋朝的文化高度繁荣,戏曲、杂技、音乐、诗歌、小说等都在宋代高度繁荣发展。宋代开始大规模的城市化。中国首次出现了主要以商业,而不是以行政为中心的大城市。宋朝发达的交通为人类封建史之最。宋朝每十里设一邮亭,每三十里设一驿站。宋政府"以法治邮"对邮驿是十分重视,保证了邮驿的正常运行。使各地的官道星罗棋布、四通八达。"白塔桥边卖地经,长亭短宜驿分明。"地经就是地图,宋朝的地图已经相当的精确。宋朝四京是东京开封府,西京洛阳府,北京大名府,南京应天府。宋代大城市人口集中,北宋首都汴梁和南宋首都临安都是超过百万人口的大城市。宋朝人口如泉洲一样超过二十万的有六个。宋朝十万户以上的城市由唐代的十几个增加到四十六个。(南宋末期西方最大最繁华的城市是威尼斯只有十万人口。)在城市所有干道的塔上都挂有一个时针。每个钟都有一个人看守照料。他敲着铜罗报时,即使在很在窄的小巷都会回荡着这种声音,随后他用文字把时刻展示给人们看。北宋富强160多年,京都汴梁(今河南开封)"比汉唐京邑,民庶十倍",汴梁城不仅旱路畅通发达,水运也十分发达。"舳舻岁岁衔清汴","联翩漕舸入神州"。"汴都数百万户,尽仰石炭,无一家燃薪者"。宋朝的汴梁城已经用煤(西方称之会燃烧的石头)而不是用木材生火做饭取暖了。当时西方都是用木头劈柴生活作饭取暖。中国1949年解放后的各大城市都没有达到这一点。新兴的市民阶层的诞生,富庶安逸的生活使宋人消费意识浓烈,极大地刺激了茶坊酒市、娱乐业等第三产业的繁荣发展。宋朝的城市不像唐朝的城市一到黑夜就一片黑暗了,宋城在黑夜里是灿烂的光明之城。因为宋朝不像唐朝一样实行宵禁,宋人有夜生活。一到夜里,宋人就自己的房间里、在家门口、庭院门口都点上了灯,因而到处都有灯光。在夜晚赶路游玩的人们都拿这各种各样的灯笼。因此在夜晚整个城市都在闪烁。在夜晚城市里灯火通明,叫卖声到天明。在"瓦子"、"勾栏"等固定娱乐场所百戏伎艺竞演,市民集中观看。夜间饮食店铺生意兴隆,直到太阳从新升起街上一样挤满了人。"大街一两处面食店及市西坊西食面店,通宵买卖、交晓不绝","其余桥道坊巷,亦有夜市扑卖果子糖等物,亦有卖卦人盘街叫卖,如顶盘担架卖市食,至三更不绝。冬月虽大雨雪,亦有夜市盘卖。""酒垆博塞杂歌呼,夜夜长如正月半。""梁园歌舞足风流,美酒如刀解断愁。忆得少年多乐事,夜深灯火上樊楼。""山外青山楼外楼,西湖歌舞几时休?暖风熏得游人醉,直把杭州作汴州。"游人不止是皇亲国戚、达官贵人等少数的宋人而是城里的广大的市民、大多数的宋人。宋人生活得是如此富足幸福。宋朝没有"路有冻死骨"的贫穷与"国破山河在,城春草木深。"的悲观绝望。只有"西湖歌舞几时休"的醉生梦死的乐观、繁华。

  宋朝开发了南方,实际是开发了领土。为南方人更像中国人做出了历代都难以比拟的贡献。虽然古之时有所开拓,但南方相对中原北方大部分仍是蛮荒之地。这种开发不是战争的开发是文化经济的渗透侵略。唐朝柳宗元被贬柳洲的时候,柳洲之地的当地人还是还未开化有纹身风俗的原始人。宋以前浙江福建广东一带还称做越族粤族。就是到了北宋末年,蔡京为了排斥异己,将政敌们贬官或流放到南方,蔡京想让这些政敌到落后的南方在无医无药中死去,可见当时南方多么的落后。宋朝的强盛使南方人也成为真正的中国人。南方各少数民族也逐渐融入中华民族大家庭。宋以后中国在再没有南北分裂,中国各地的中原人北方人南方人在富强繁荣的大宋王朝已逐渐捏合成一个整体。北宋真宗、仁宗时就打破了"南人不为相"的传统。临江人王饮若、苏州人丁渭担任宰相。宋理宗曾说:"南北皆吾赤子,何分彼此……"开宝九年在曾是三苗之地的湖南长沙兴建四大学之首的岳麓书院,宋真宗亲笔赐书正门"岳麓书院"四个大字,留存至今。宋朝的文人朱熹等文学思想大家来此授学讲课,传授儒家经典、立国齐天下和民贵君轻等民主思想。公元1024年秋——公元1028年春范仲淹在泰洲亲率民工四万余人修建完成了一百五十余里的捍海堤工程。从此盐场、农田有了保障,使往年受灾外迁的数千户人从返家园。人们为纪念范仲淹的功劳,这条海堰被称为"范公堤"。范仲淹被贬苏州时经过一年多与广大民工的劳作修建完成了苏州水利工程。使相对贫瘠的苏州成为旱涝保收的大粮仓。公元1085年苏东坡被贬到杭州,那时杭州还是相对较落后地区,苏东坡修建六井解决了全城用水。并全面整治西湖,挖出大量湖底葑泥用之修建一条沟通南北的柳堤。人们为了纪念苏东坡取名"苏堤","苏堤春晓"至今仍是西湖胜景之一。苏东坡一生先后转徒知密州、徐州、湖州、杭州、颍州、扬州、英州、惠州等地,最远最南到达海南岛,可以说一路上督劝耕稼、兴修水利替百姓排忧解难。宋朝犯错误或因政见不合被贬的官员一般都是被流放到南方落后地区。从而使他们有机会报效国家、证明自己、造福那里的人民。

  两宋时期是太湖流域社会经济发展水平跃居全国前列的关键时期。苏州在雍熙(公元984年-公元987年)前后的耕地数至多不超过1,400,000亩,在景祐年间(公元1034-公元1037)苏州出税之田3,400,000亩。50年间耕田数增加近1.5倍。端平二年(公元1235年)苏州总耕地数越在12,000,000亩左右,为景祐耕地数的3.5倍,雍熙耕地数的8.5倍。宋政府高度重视疏浚工程和堰闸工程,时常大规模开展水利工程,大力提高了生产力。创造了成功的经验。首先,疏通河湖港浦的水利工程,使广袤农田去水涝之害而得沾溉之利。如公元1055年(至和二年),调发民夫15.6万,疏浚诸泾64、浦44、塘6,筑成至和塘,"田无洿潴,民不病涉",两岸膏腴之地数百万顷都蒙其利。公元1119年(宣和元年),赵霖役工278万余,历时19个月,浚治1江、1港、4浦、58渎,使平江府"二十年间并无水患"。公元1115年(政和五年),江阴浚治横河、市墩河、东新河和代洪港以后,使附近"十乡之田,频苦旱涝,尽除其患",得益农田达6,573顷。公元1167年(乾道二年),开浚顾会浦河道,"故水所败田数万亩还为膏腴"。开通疏导河湖港浦,不仅保证了太湖水系能循环畅通地流入江海,而且使当地农田能够有力抗御水旱灾害。在各种水利工程的综合效应下,太湖流域的农田建设大受惠益,是宋代全国水利田最密集的区域。有人对北宋熙宁年间各路水利工程、水利田及其占总耕地数作过统计,太湖流域所在的两浙路均位居第一,水利工程为2,294处,水利田为10,484,842亩,占总耕地数的28.8%。南宋淳熙前后,以太湖流域为主体的浙西路水利工程为2,100余处,接近熙宁时期两浙之和。《宋史·食货志》说:浙西"南渡后水利之田富于中原,故水利大兴"。太湖水利使"低田常无水患,高田常无旱灾,而数百里之内,常获丰熟",经过治理的太湖流域"畎浍脉分,原田棋布;丘阜之间,灌以机械;沮洳之滨,环以茭楗;则泻卤硗确,变为膏泽之野;萍藻葭苇,垦为秔稻之陆",成为宋代集约化农业的首善之区。 

  宋朝南渡定都杭州后,大量北方、中原人民迁移到南方。全国精英云集杭州。使南方更是繁荣起来。迁徙的人们怕后代们不知道自己祖先的来处,发展形成了宗祠的文化。公元1102年杭州人口仅二十万户,公元1274年人口达到一百二十四万户。杭州人口大部分都是外迁人口。宋朝在南方的开拓与经营,奠定了南方的富裕。从此以后历代南方都是中国经济最发达的地区。

二、宋朝科技技术

  宋瓷是当时中国的国家标志。宋时的五大名窑是汝窑、官窑、钧窑、哥窑、定窑。可以说人类世界上第一个商业化的工业是宋朝的瓷器工业。宋瓷是最精美艺术与精确工艺完美的结合。宋瓷神韵文明与大众文化巧妙的融合与统一。各地名窑瓷器大量地生产,不仅供皇家贵族使用,还为官员学者们、及市民阶级所珍爱、使用。宋瓷的各种窑类造法制造出来的瓷器品种层出不穷。让所有见着的人都赞叹不已。宋瓷许多的工艺都已失传。宋瓷许多的工艺水平即使现代都难达到。宋朝的瓷器是如此的精美,可以说宋朝遗留下的名窑瓷器几乎都价值连城。宋时中国的大众丝绸工艺从实用化走向细腻化精密化。宋朝的丝绸,超乎寻常的先进。非常尖端的织机,包含1800个活动的构件。各种绣法让中国的丝绸更艺术化、更美学化。宋人诗《木棉》有"车转轻雷秋纺雪,弓弯半月夜弹云,……机杼终年积妇勤"等句,反映了扦子、弹花、纺纱、织布的劳动过程,以及所用铁铤、弹弓、纺车、织机等各种棉纺织工具。外国富人穿的是粗布麻衣,中国平民穿的是柔丝绸缎。有的农民也穿上了丝绸。"走卒类士服,农夫蹑丝履。"1966年浙江兰溪县南宋古墓中,出土了一条随葬棉毯,说明江南地区不仅能织布,而且还能织毯,反映了棉纺织业的新发展。 
  

  北宋时期的著名科学家沈括,对天文、历法、医药、数学等都有研究。沈括写《梦溪笔谈》记载了大量科技成果与科学发现,如地磁角的发现、摩擦起电现象的记录及讨论了光学问题等等。沈括还提出了冲击成陆的观点,此观点西方十九世纪以后才出现。《梦溪笔谈》被西方誉为世界上最早的科技百科全书。宋代随着农、林、牧、副、渔各项事业的发展,宋的农业生态系统物资循环观点与今天人类正建设的现代化生态大农业的观点,在原则上达到了完全一致。宋的医学规模及水平较唐代有了大幅度提高,宋太祖时编刻的《开宝本草》比《唐本草》增加新药133种。宋仁宗时所修《嘉佑补注本草》又增加新药82种。到北宋末年所编印的《政和经史证类本草》新增药品达628种。宋代还创造了法医学,《洗冤集录》是中国第一部系统的法医学著作,比西方同类专著早了三百多年。《梦溪笔谈》最早记载了石油,"延境内有石油,旧说‘高奴县出脂水’即此也"。宋朝对石油、煤炭、天然气各种能源广泛运用。宋代用焦炭冶铁,早于西方五百多年。 

   
  人类史上最早使用热兵器的是宋。把指南针用一军队的行军也是宋。北宋初年,政府对制造火药武器非常重视。首都汴梁有专门制造火药和火器的官营手工业作坊。宋军在功灭南唐,夺取金陵的战争中就使用了火炮、火药箭。公元1000年(咸平三年),唐福呈献火箭、火球等新式火药武器,受到宋政府嘉奖。从此,火药成为宋军必备装备。后来北宋政府建立了火药作坊,制造了火药箭、火炮等以燃烧性能为主的武器和霹雳炮、震天雷等爆炸性较强的武器。公元1044年曾公亮等编著军事著作《武经总要》里记录了三种火药配方及多种火药武器,并配有插图,这是世界上最早的火药配方和工艺程序的记载。公元1132年军事技术专家陈规守德安(湖北安陆)时创造了火枪,把火药装在竹筒内点火喷射,这是射击管状火器的鼻祖。公元1161年宋朝军队里出现了投掷榴弹的弩机。公元1259年造出了以巨竹为筒,内装火药的突火枪,在竹筒内放置火药后再安上子窠,用火药的力量把子窠射出去,子窠类似子弹性质,用石子、铁块等制成。后来把竹筒改为铁管或铜管。这是世界上最早的原始步枪。由于宋朝出现了火炮,中国象棋也在宋朝时基本定型,出现炮。宋代《事林广记》中就记载着中国最早的象棋谱。宋朝还发明了救生圈并用于军事,《宋稗类抄》所载: 宋将韩忠武派王权到金山,同时命令他不准用船渡江,王权就发给每个士兵一个"浮环"渡过江去,完成任务。"浮环"就是现代救生圈的前身。
  
  宋代的纸窗银盐化学物质显影、定影原理,这些发明均比西方人早几百年。苏东坡在《物类相感志》中记载了"盐卤窗纸上,烘之字显"的现象,这是世界上最早发明的银盐变黑显影技术。与之相对应的是,直到十五世纪意大利文艺复兴后期,西方才开始使用暗箱作画。到了十七、八世纪,德国的约翰.海因里希.舒尔茨才发现了银化合物的光敏特性。
   
  宋太祖开宝四年(公元971年)雕印全部的《大藏经》,刻板十三万块,印行一千零七十六部,五千零四十八卷,费时十二个春秋。做如此浩大的工程印制书籍世界第一。中国最早的小说总集是宋太宗太平兴国年间(976年——983年)的《太平广记》,共有五百卷,分九十二大类。我国的类书之冠是宋太宗时的《太平御览》,共一千卷,分为五十五门。我国现存最早的剧本是南宋的《东海黄公》。北宋熙宁以后私刻、坊刻蔚然成风。有的私刻书铺有刻工几十人之多。宋朝雕版印刷进入鼎盛时期。宋政府推广印刷术大众化,传播技术手册,诸如农业手册和医药书籍。大量的私人出版社的产生,改变了世界文字的发展,传播了知识。宋哲宗时期商人徐戬,刻印《夹注华严经》等书,运往朝鲜等地贩卖,获取了大量的利益。庆历年间,毕生发明了活字印刷术。遗憾的是活字印刷并未得到大规模的运用,但其意义巨大。系统可分解为要素,要素集结起来构成主体。活字印刷术是中国古代应用系统思维的具体实例,是应用系统思维、改进工艺、提高效率的典范。宋版书讲究质量,雕版细致,字体工整,刀法圆润,纸坚色白,墨色香淡。北京图书馆所存的宋版书,至今还有一股清香味。   

  沈括《梦溪笔谈》中记有装置指南磁针的四种方法:水浮、指爪、碗唇、缕悬。北宋时期,人们创造了适用于航海的指南针,把航海事业推向了新的时代。南宋时期,还普遍制造车船。车船装有轮子,用脚踏轮,激水而行。那时中国的造船技术是世界上最先进的。1974年,在福建泉州湾发掘出一艘南宋末期的海船。根据其长、宽、深计算,载重量当在二百吨以上。这艘船的造型和结构都与宋代文献记载相吻合。特别值得注意的是,它的船舱竟多达十三个。2002年,在广东省阳江海域的"南海一号"宋代商船,约30米长、10米宽,是目前发现的最大的宋代船只。令人惊奇的是,这艘沉没海底近千年的古船船体保存相当完好,整艘沉船没有翻、没有侧,而是端坐海底。而船体的木质仍坚硬如新,敲起来铛铛作响。目前在全世界范围内都未曾发现过如此大的千年古船,能保存如此完好的更是未有所闻。宋的商船是当时人们能够想像出的最大的船只,有的有六层桅杆,四层甲板,十二张大帆,可以装载一千多人的巨型船只。这些船不仅拥有精确得近乎奇迹的航线图,还拥有几何学家以及那些懂得星象的人,还有那些熟练运用天然磁石指南针的人。通过指南针,在茫茫的大海中可以找到通往陆上世界尽头的路。宋朝是当时最重要的海上的贸易大国,泉洲、明洲都是当时最大海上贸易港口。海上贸易的税收是政府的主要财政来源占到了一半的财政收入。北宋时中国就拥有人类历史上最庞大的帆船舰队和商船队,频繁远航至阿拉伯,东非,印度,东南亚和东亚的日本与朝鲜。正是由于宋朝的高度繁荣和发展与开放的经济政策,导致了人类史上空前的东西方技术和物资交流。中国的造纸术、印刷术、指南针等等先进高超的技术迅速传遍西方,中国大宋创造出的灿烂文明让正处在野蛮时期的西方人第一次较完整的体验拥有了文明。中国文明各个方面都影响着西方,给西方后来的文艺复兴与文明的发展打下了坚实的基础。 

   宋代是中国古代数学的最繁盛时期,是中国古代数学的颠峰。宋朝涌现许多杰出的数学家,出现了大批有份量的数学著作。宋代最抽象的数学成就极高,在希腊文明与西方之间的空白地带鹤立鸡群。宋的代数学充分发挥了绝对化的方法,把汉代方程解法的组合变换式发展到了一个奇妙的境界,不但在解法上解决了很多问题,也提出了高次方程、虚根等问题。西方的方程学在几个世纪之后才出现。宋的方程学是一个发达的数学学科。沈括的"燎积术"是中国第一个高阶级等差级数。沈括的会圆术是一个几何问题,把勾股定理用于从弓行的弦、和矢求弧长。宋朝著名数学家贾宪在《黄帝九章算法细草》中提出开任意高次幂的"增乘开方法","增乘开方法"用于求解高次方程,是在求得一位商后即以之乘高次未知数的系数加入新方程一次项系数。在作法上把商、常数项、新方程一次项系数和高次未知数系数分别排列,再用上法对这个组合进行变换。七百年后西方人才发明了同样的方法(1819年才由英国人霍纳发现)。贾宪的二项式定理系数表与17世纪欧洲出现的"巴斯加三角"是类似的。南宋杰出的数学家秦九韶,公元1247年在《数书九章》中将"增乘开方法"加以推广,论述了高次方程的数值解法,并且例举20多个取材于实践的高次方程的解法(最高为十次方程)。16世纪意大利人菲尔洛才提出三次方程的解法。另外,秦九韶还对一次同余式理论进行过研究。秦九韶还推广了孙子定理,他的"大衍求一术"将孙子定理的方法从较小的数和较少的同余式个数推广到一般解法。秦九韶还得出了与希腊海伦公式等价的从三角形三边求面积的公式。刘益的"益积术"、"减从术"也是对系数组合进行变换的技术。数学家李冶公元1248年发表《测圆海镜》,该书是首部系统论述"天元术"(一元高次方程)的著作,在数学史上具有里程碑意义。数学家杨辉公元1261年在《详解九章算法》中用"垛积术"求出几类高阶等差级数之和,给出了几种高阶级数的求法。公元1274年在《乘除通变本末》中还叙述了"九归捷法",介绍了筹算乘除的各种运算法。此外杨辉还发展了九宫图,他作了圆、直线交叉的组合。使宋在组合数学上也有进步。杨辉在数学组合上指出4乘4数学方阵上交换对角结果,可惜他以后没有进一步发展。数学在宋代已经开始得到重视,数学的研究成果在宋朝已开始有应用的环境了。数学家秦九韶认为数学的研究成果"可以经世务,悉万物","窃尝设为问答以拟于用的"。数学家李冶公开批判轻视科学实践活动,将数学贬为"贱技"、"玩物"等长期存在的士风谬论。他说"术虽居六艺之末,而施人之事,则要实惠得多。"中国的数学在宋代领先西方几个世纪。遗憾的是宋以后中国的数学开始衰落,虽然在元朝中国古代数学还有零星发展,但中国数学整体的已没有继续、发展运用的大环境了。中国宋代是数学是世界的奇迹,但也是中国科学的一个悲剧……

三、宋朝的政治民主

  赵匡胤得意于诸侯割据,他深深的知道诸侯割据对国家人民的种种坏处。宋太祖杯酒释兵权吸取了唐朝诸侯割据[实质上是国家四分武裂]的经验教训。是加强中央集权促进祖国统一的深谋远略。宋太祖赵匡胤不仅没有杀害有功大臣,还用法律形式规定以后皇帝不能在朝庭上鞭打大臣。不准对公卿辱骂。臣下除了谋反和叛逆外,不得杀戮。宋太祖传下"不得杀士大夫及上书言事人","子孙有渝此誓者,天必殛之"的"誓牌"。历代皇帝都严格执行这一祖训。即使是因战乱得位的杀害岳飞的宋高宗赵构,也只开三回杀戒。这在其他历朝历代都是极其罕见的。宋朝统治者非常重视吸取中国过去的历史教训。司马光编著了著名的《资治通鉴》。以参知政事的设立为标志,宋朝实行的是宰辅集体领导制,是中央集权更理性化运转的一种标志。在相当程度上皇帝也必须听取宰辅集体的意见,应该说最高统治者不能凭一己之喜怒哀乐随意处置朝政或决定大臣的去留乃至生死命运。国家治理的"文臣化"是历史发展的趋势,宋朝仁义立国,政局清明。宋朝的没有地方势力的割据,也没有宦官、后妃、外戚的专权干政乱国。宋朝没有文字狱,官员们不会因为说错话写错字而掉脑袋、全家抄斩、灭门九族。宋专门建立了言官制度。宋仁宗时近一步增加台谏力量,和庭辩力度。以文治国是中国从野蛮社会走向现代文明进程的标志。开明宽厚的政治氛围,使官员们敢于抨击朝政,发表自己的政治主张。致使宋朝涌现出大批中国历史上敢于直谏的官员,如寇准、范仲淹、包拯、欧阳修、苏轼等等伟大的名字。中国历史上只有宋代才能出现像包拯这样和仁宗皇帝在朝堂上当面争吵,包拯的唾液都飞溅到宋仁宗皇帝的脸上的事。宋仁宗即使再生气也没把包拯怎么样。包拯照样勇于直谏、照样升职为官。"终仁宗之世,疑狱一从于轻"。宋仁宗对疑难案例都是从轻发落。可见宋代皇帝的开明与民主。整个社会尊重知识份子,文化人地位空前提高。宋朝历代都特别爱惜人才,优待官员。即使是卢多逊和丁谓图谋皇位,这样的重大犯罪也只是流放了事。宋代并没有形成所谓的官场,下级官员可以告上级官员。就是"一人之下,万人之上"的宰相也难幸免。其中包拯就把他顶头上司及几位比他职位高的官员弹劾倒了。包拯这样的人物只有在开明的大宋王朝才能产生。宋朝民告官的事也屡见不鲜,各级衙门门口都贴着反腐规训,人民可以上诉、告官,直至胜诉。

  宋太祖招令300人去天竺求取经书与舍利。宋太宗曾亲自接见古印度婆罗门僧人和伊斯兰教徒。在宋朝有大量基督教徒、犹太教徒及其它教徒拥有自己的屋舍、教堂、寺庙。加上宋的儒教、道教的繁荣昌盛。可见宋朝的中国以是多宗教并存开放的国度了。只是在宋朝基督教、犹太教及伊斯兰教根本竞争不过儒教、道教、佛教。早在马克菠罗到达中国之前就有大量的欧洲商人到达中国经商。现西方又发现有意大利商人兼学者雅各.德安科纳早在1271年就到达中国的泉洲并记下了传记。那时只是在泉州生活经商的就有大批威尼斯人、犹太人、英国人、萨拉森人、法兰克人、锡兰人、印度人、小爪哇人、比萨人及一些黑人,还有来自亚力山大里亚、布鲁格等地的人。大批欧洲及亚洲人在中国经商或定居,那时泉洲已有大量混血儿。其中宋朝更是同化了大批犹太人。这在人类历史上是"前无古人,后无来者"的。只是有记载的在宋朝首都开封就有犹太人的17个大家族,接受"归我中夏、遵守祖风、留遗汴梁"约法三章之后,定居中国。同化犹太人足见宋朝各个方面的强盛。可见中国文明及科技技术在宋朝时就传播、影响到西方。各种信仰的各种人一同和睦相处的生活在开明富强的大宋社会里。合而不同是大宋王朝的整体写照。

  宋朝成为中国历史上自春秋战国以来第二个学术自由的时期。宋朝第一次出现了工匠传统和哲学传统合流的迹象。宋朝闻名的四大书院(岳麓书院、白鹿洞书院、鹅湖书院、嵩阳书院)成为儒家弟子吸取文化乳汁的圣地,"道林三百众,书院一千徒"。宋仁宗赵祯爱好学习崇拜儒家经典。赵祯首次把论语孟子大学中庸拿出来合在一起让学生学习。四书五经为太学规定的必修课程。军事方面的最高学府称武学,相当于军事大学。宋还有科技一类专门学校,如算术、医学等。此外宋还有大量的家塾、舍馆、书会等学习场所。"每里巷须一二所。弦诵之声,往往相闻。遇大比之岁,间有登第补中舍选者。"南宋设在曾是岳飞府地的太学院最多有太学生一千七百余人。太学有学生宿舍还有体育场。太学考生来自四面八方。录取比例在3%——6%。太学实行五年制的三舍法。初进太学在外舍学习,一年以后学习合格者进入内舍在学习两年,合格者升入上舍学习。在上舍再学习深造两年,考试合格者毕业。太学生伙食费完全由政府包办,每人每年要花费三千贯左右。宋政府只是给太学院太学生的伙食费一项,每年就投入花费500多万贯。科教兴国不仅促进了科技、商业、文艺的繁荣,也推动了政治的多元化思维,民主开明的政治报复思想的派系建立等。

  宋朝的政坛并非一滩死水,宋有民主的党派之争,宋有改革派、保守派、主战派、主和派等等。改革派,保守派并不是简单的两个派别。也不是固定不变的。公元1042年范仲淹、欧阳修变法实行"庆历新政"。公元1069年王安石变法。司马光反对变法,欧阳修也反对,苏轼也反对。但反对和反对的观点也不同。苏轼在变法派执政时反对变法过急,又在保守派执政时发对对新法全都抛弃。司马光与王安石彼此相互尊重,只是政见不同。两派人士虽然观点立场不同,都不是为私利而是以国家利益、人民为重。宋的党派之争是民主政治的典范。 

  宋代在哲学方面突破了五代以来沉闷墨守的局面,伴随通经致用,讲求义理以及疑古思潮的兴起,周敦颐、邵雍、张载、程颐、程颢、朱熹、陆九渊为代表的理学等诸多流派。早在先秦时代,《老子》、《易经》已表明有对立统一的原理,宋代的张载、沈括等人更是对辨证逻辑作出了重大贡献。使中华民族早就拥有辨证的思维、深邃的思想。"当希腊、印度人很早就仔细考虑形式逻辑的时候,中国人对发展辨证逻辑作出了卓越的贡献。"宋儒诸子融汇各家,援佛入儒,建构成新儒学体系,不仅升华了抽象思辨,而且高扬士人刚健挺拔的道德理性和节操意识。宋人把中国系统哲学推到了空前未有的高度。宋学深入到现象世界的背后,探索了宇宙系统的本体和深层内在联系,并把宇宙的发生学和横向结构融为一体。宋人宇宙生成演化的系统思想、天人合一思想,是社会系统与天地系统的和谐统一。

  朱熹把"理"推到了至高无上的地位。成为理学集大成者。理学由朱熹发展到高潮,并从他以后开始衰弱。后代思想家也没有本质的突破。朱熹曾说:"凡人须以圣贤为己任"。这是宋儒理学的中心思想。朱熹认为常人和圣贤的天赋禀性没有什么差异,并教导人民在道德情操与学问躬行两方面下功夫。常人只要立定志向,严格要求自己,不断的学习就能成为圣贤。"修身、齐家、治国平天下"是劝导人们积极入世,实现自我人生价值的宗教思想。告诉人们现实世界就是人生的全部奋斗环境。这种思想号召教导人们在心性、精神、体验中去接近天理。所以说宋时的儒教是文化人的宗教。

四、宋朝的文化艺术

宋朝是个群星汇粹的年代,寇准、包拯、欧阳修、范仲淹、王安石、苏东坡、沈括、岳飞、朱熹、李清照、辛弃疾、文天祥等等一大批在中国乃至世界史中光彩夺目的人物。宋朝因为极其重视文教,学术文化的成就极高,中国文化至此更趋精深成熟,所以更方面的人才也就不断的涌现了。明人宋濂谓:"自秦以下,文莫盛于宋。"唐宋八大家,宋朝占了六位,除"三苏"苏洵、苏轼、苏辙外、还有王安石、曾巩、欧阳修。宋四大书法家:苏东坡、黄庭坚、米芾、蔡襄。理学家北宋二程:程颐、程颢。南宋东南三贤:朱熹、张拭、吕祖谦。南宋四大家:陆游、杨万里、范成大、尤袤。重要的是宋朝许多名人文化大家,都是出身贫苦。范仲淹、欧阳修都是单身家庭出身,自幼贫寒。范仲淹一岁时父亲就去世了,母亲谢氏带着尚在襁褓中的仲淹改嫁朱姓的人家。范仲淹从小生活极其艰苦,喝粥度日苦读。欧阳修年少时家里买不起笔纸,他母亲用芦秆画地教他识字。最终两人都通过自己的努力,成为文化大家,朝廷重臣,国之栋梁。范仲淹、欧阳修或许命运相近,两人成为真正的朋友。王安石、苏洵、苏轼、曾巩都是欧阳修培养扶植起来的文化大家。苏轼又培养了著名的苏门四学士:黄庭坚、秦观、晁补之、张耒。陆游是曾巩的学生,陆游、辛弃疾是好朋友,他们在一起的交往聚会组成了文化沙龙、文学俱乐部。宋朝民间涌现了许多的文学社体,总之宋朝是文化人的天堂。

宋四大书法家:苏东坡、黄庭坚、米芾、蔡襄。宋代涌现许多著名画家主要有范宽、郭熙、赵佶、李唐、马远、夏圭、张择端等。最能代表中国画最高艺术水平的就是宋代山水画的博大与意境!宋代山水画家人才辈出,各有专长和创造,北宋李成的塞林平远,范宽的崇山峻岭和雪景,许道宁的林木野水,郭熙描绘四时朝暮、风雨明晦的细微变化,惠崇、赵令穰的抒情小景,米芾、米友仁父子的云山墨戏,李唐、马远、夏圭高度剪裁而富有诗意的山水反映了山水画艺术的不断变革和发展,与刘松年共称南宋四家。

宋朝是一个诗歌的国度。宋朝诗歌是一个巨大的宝库。里面有各个方面的知识财富。但这个宝库,我们认知开发的极少。宋朝的诗歌是唐朝诗歌的延续、再发展与突破。宋朝的诗人更广泛、诗篇更丰富。诗歌的种类、形式在宋朝达到丰富。宋诗创作数量空前丰盛。北京大学正在编纂《全宋诗》,据初步统计所收作者不下九千人,为《全唐诗》的四倍。《全宋词》辑录,共收词人一千三百余家,词章近两万首。孔凡礼《全宋词补辑》,又增收词人百家,词作四百多篇。

宋代多高产诗人,陆游自谓"六十年间万首诗"。陆游现留存诗篇九千三百多首。杨万里写过两万多首。但现在只留存的一小部分。南宋四大家之一的尤袤留下的诗篇就更少了。那么多伟大的诗人写了那么多首诗歌,我们更多的人只能有机会读到他们几首诗,可以说连皮毛都没接触,别说体会他们的精骨了。宋诗反映社会视野较前有所拓展,切入生活力度有所深化。宋与唐的时代气象与氛围不同,诗家又勇于创新,因而形成与"唐音"殊异的"宋调"。宋词作为新兴的合乐诗体,既可传诵于文士案头,又能流播于乐人歌喉,强化了它的娱乐性和传播力,拥有众多接受群体。

宋是中国文明的第二次浪潮。不仅使神韵文明向绝对化发展,还使平民文化发展起来。戏艺,有滑稽剧、杂技、傀儡戏、皮影戏、说话、杂剧等等。其中杂技就有上百种。宋人小资情节严重,宋词中抒发的感情大多都是抒发那种浅斟低唱的闲情逸趣。宋词体现了宋朝稳定的政治局势、繁荣丰富优越的社会生活。娼妓业的兴盛起源于宋代城市经济的高度繁荣。宋代的娱乐业则分得更明确,大致分为了"官妓"、"声妓"、"艺妓"、"商妓"四类。宋代的"妓"并不是现代意义上的"妓"。大部分可以买艺不买身。她们大多数相当于现代的文艺工作者。她们一般都是才貌双全的,有的人对琴、棋、歌、诗、书、画、等有很深造诣的,有的可以称上是那个方面的艺术家了。"官妓"是最为人们仰慕。她们不只是相貌出众,还非常有才华的。她们品貌、学识、才智和艺术趣味都非常出众超群。现在的演员明星、或从事文艺工作的女人都难以比上她们,因为以前的红楼女子是从小培养、不断的熏陶出来的,而现在的一些演艺界女士,长得漂亮点只上两年学就有可能成为明星……可以说一个宋代的名妓,要比现代的女明星强不少。

茶文化是在宋代时才达到艺术的境界。宋朝的茶不是现在意义上的茶,而是茶饮料。有的要加糖,有的要加盐,要加各种作料的茶。这是有无数种喝法的茶饮料与茶文化,遗憾的是像宋朝大多数的工艺、文化一样没有遗留到现在。宋时已有各种花瓣茶流行叫卖。宋还有斗茶之风。蔡襄在《茶录》中介绍建安斗茶,特别推重当地所产的一种半发酵的白茶。宋人用各种漂亮的、精致的瓷碗的饮茶,其中兔毫盏、天目碗等都是当时有名的茶具。民间根据兔毫盏色泽的微妙不同又分称"金兔毫"、"银兔毫"。宋代茶盏分黑釉、酱釉、青釉、青白釉四种。"轻裘骏马成都花,冰瓯雪碗建溪茶。""矮纸斜行闲做草,晴窗细乳戏分茶。""鸡唱三声天欲明,安排饭碗与茶瓶""道旁草屋两三家,见客擂麻旋点茶"。宋朝的诗歌里就时常渗透着茶文化。"七物甘香杂蕊茶,浮花泛绿乱于霞。啜之始觉君恩重,休作寻常一等夸。"北宋著名现实主义诗人梅尧臣,也写出这么悠闲具有小资情节品味的品茶诗。宋徽宗《大观茶论》二十篇文章介绍茶文化。宋代茶文化是精英文化、大众文化的综合体现,是雅俗共有的文化。

玉文化是在宋时开始流向民间的。由于宋徽宗对玉器的过分喜爱。导致玉器在宋代空前发展,世俗化倾向的玉雕空前发达。宋的玉器玩味大增,礼性大减。宋代出现了玉雕市场和专门贩卖玉器的商铺。市民成为玉器的玩赏者、拥有者。佩带玉器受到广大的市民阶层及文人墨客所追捧流行。除玉雕之外,宋的木雕、竹刻、漆器、铜器、金银器、牙角器、碑帖、印章、及笔墨纸砚等等都有极高的造诣。这些都表明宋的文化艺术的高超深厚。虽然宋代开始纸质明器、陶俑日渐衰落,但也有陶俑出土而且有的造型奇特美妙,有人首鱼身的"仪鱼"、人首鸟身"观凤鸟"蛇体双人首的"墓龙",这表明宋的文化的丰富性与多样性。用纸器祭祖之风一直留存至今……

金石学开始于宋代,欧阳修及李清照的丈夫赵明诚都是当时著名的金石学家。宋朝的金石学们不仅对古器物及古器物拓本进行搜集,还对古器物、金石文字进行鉴定考释,并且以古器物及金石文字来考订历史记载。许多失传已久的书籍在宋朝进行从新修纂,如中国最早的字典东汉的《说文解字》早已失传,就是宋朝的徐铉氏兄弟从新编纂的。

宋代的文化生活的各个方面都是深远的影响到渗透到我们现在的生活。现在使用广泛的宋体字就是宋朝创造出来的……

清朝学者辜鸿铭认为,如果唐朝人是正统的中国人的话,那今天日本人更是中国人,因为日本人更像唐朝人。从文化的角度讲,日本人更多继承的是中国唐朝及其以前的文化。也就是说今天的日本人比今天的中国人更多、更好的继承了中国唐朝及其以前的文化。严复说:"究人心政术之变,则赵宋一代历史最为揪心。中国所以成今日现象者,为恶为善姑且不论,宋人所造什八九。"

英国史学家汤因比说"如果让我选择,我愿意活在中国的宋朝。",中国学者余秋雨也说"我最向往的朝代就是宋朝。"……因为什么?因为宋朝是文化艺术的殿堂……


五、宋朝的军事武功

宋军初期其实并不弱。到979年,高丽女真皆贡于宋。宋朝的开创者赵框胤出身贵族,是一个高级将领。他本身并不注重抽象的理论而是非常注重实际技术、重视科技。他称帝后,很少与文臣探讨儒家典籍,而是经常亲自出题科考或亲临造船务、监督水战、整饬军政等。赵光胤本身很重视军事武力建设的……北宋开国之初,军队个人素质是历朝最高的。《梦溪笔谈》里专门比较过历代弓的强度,宋初的士兵膂力要比汉唐高得多。他经过了一番沥血奋战,灭后蜀、南唐,初步完成了统一。他不给武将太多权利是因为怕军阀割据、国家不安定……他死后传位于其弟。宋太宗赵光义又灭了吴越、北汉等国。根据赵光胤的遗愿收回燕云十六州发动两次侵辽战争。宋军主动进攻辽军,可见宋军的实力并不亚于辽军。由于轻易冒进、前线指挥失物等等原因使宋军没有取得成功,但也没有溃败。宋军停止了对辽战争是因为由于经过长期的战争后建国不久,宋需要调整。
    
  公元1004年(景德元年),宋真宗御驾亲征渡过黄河,宋军与屡犯边境的辽军大战十多天,辽军统帅萧挞览中箭身亡,辽兵多有逃散。最后辽军抵挡不住,请盟议和。虽然寇准不同意议和主张乘胜追击。但宋真宗却渴望和平,不喜战争,不想再继续劳民伤财、不愿意生灵涂炭。大宋在胜利的情况下与辽国签订了"澶渊之盟"。大宋在胜利的情况下与辽国签订了"澶渊之盟",使两国成为兄弟之邦。同时宋朝同意每年给辽国白银十万两,绢二十万匹(相当于30万贯)。公元1021年宋朝的国家财政收入总数为15000万贯。北宋时期宋政府的平均年财政收入应在有10000万贯以上。一两白银兑等于一贯铜钱。30万贯对宋朝每年的巨大的财政收入来说不值一提。仁宗宝元年间仅陕西一地,和平时期军费2000万贯,战时3300万贯。只是陕西一地,战争军费比和平时期军费高1300万贯。最重要的是"澶渊之盟"使宋朝依然侵占辽国"关南"之地瀛、莫二州。澶渊之盟是赏赐失败者财物的盟约决不是失败者进贡赔款的盟约。"岁币"对宋政府及人民根本不构成丝毫压力。"澶渊之盟"使宋辽两国进入100多年和平交往的友好时期,使中国的北方恢复安定,促进了汉、契丹两族的经济文化交流,也促进了契丹人的汉化。到耶律洪基时,契丹人与汉人已没什么区别了,甚至连契丹语都不会说了。当宋仁宗去世的讣告送到辽国,"燕境之人无远近皆哭",辽国皇帝耶律洪基也握着使者的手痛哭道:"四十二年不识兵革矣。"从此以后宋以发展经济、提高人民生活水平、文化建设为国策,使那时的中国就远离了原始的武力扩张、掠夺财务的野蛮阶段。北宋拿点小钱换来了长期的安定和平、稳定的发展。使宋的商业、经济、科技、技术等等都得到了长足的进步与发展。致使北宋国事强盛、海内升平、全国上下弥漫着一股瑞气。也使人们长期处在一种富足闲暇状态。长期的和平也使宋、辽两国逐渐退化了的野蛮战斗的能力。也使宋朝远离了原始、落后的世界。公元1040年范仲淹挂帅到陕北多次打退西夏军,从此西夏不敢冒犯。范仲淹本着安定边疆的百年大计,主动引见亲近羌族首领加强睦邻友好。人民歌颂他"胸中自有数万甲兵"。据史书记载当他死去的噩耗传至边地时,"羌酋数百人,哭之如父。"北宋政府向西开疆三千余里,归附中国的藏族有二十万众。并实行屯田,分给归附藏族田地耕种。王安石:"今青唐、洮河,幅员三千余里,举戎羌之众二十万,献其地,因为熟户。"被招募安置的藏族称为熟户。宋没有倾尽全国之兵、全民之财反动对辽、对西夏的进攻是因为吸取了隋扬帝、汉武帝的教训。战争侵略得到的远远比不过自己创造的。开明的政策使宋朝的人们长期没有战争、兵役、苛税这三大"灾害"之苦。使宋朝人民长期生活富强安逸。如果说秦亡于苛政,汉亡于战乱,隋亡于兵役,唐亡于割据。那么宋就亡于安逸。 
  
  宋朝是中国历史上唯一一个坚持募兵制的王朝。宋以前、以后,中国一直到现在还实行的是强制性征兵政策。募兵制就是国家不强制你当兵,你当不当兵靠自愿。当然你当兵国家是给你钱的。宋朝的士兵都是招募的雇佣兵,而这些雇佣兵都有非常厚重的薪金,国家为此所付的军费是惊人的。政府庞大的财政收入有时都会有入不敷出的问题,公元1065年(治平二年)国家收入为一亿一千六百一十三万八千四百零五缗,支出为一亿二千零三十四万三千一百七十缗,财政赤字为四百二十万缗。此举被现代一些学者讽刺的称为"冗兵"、"积贫"。"冗兵"、"积贫"是宋朝内定的民 主开明的国策结果,不是外敌的压力造成的。过于民主的政策和长期的和平富足的生活也是使宋军战斗力弱的原因。
  
  宋代在军制上有进步之处,把军政机关与指挥系统分离,将动员系统与指挥系统分离,这些都是现代军事的特征。宋朝在缺乏长城防御设施依靠情况下坚持国富民强三百余年,不能说宋朝太弱,宋军太弱。宋不是没有能力进攻只是国策问题。宋的总兵力远远超过辽、金、蒙等国。但宋的机动兵力、在一线的兵力及却比不过它国。宋的战争成本比落后的国家要高很多。宋军兵分散。因为宋军有大片疆土、大量人民、大批财富要守。这些都是宋军的负担。而侵略军没有什么负担,想打哪就去哪。攻下了就有大批财富、美女。最好的防御就是进攻,长期的和平的国策使宋军丧失了进攻的能力。 
  
  在冷兵器时代,越野蛮就越强大,越落后就越凶恶。你落后贫穷就有动力掠夺比你富裕的人。辽国比宋野蛮,所以宋给辽钱绢。金比辽野蛮,所以金灭了辽。蒙古人比金人野蛮,所以蒙古灭了金。蒙古人比宋人野蛮得多,所以宋当然打不过蒙古。纵观世界史,历史上文明的古国都是被比它落后、野蛮的民族消灭。齐被秦消灭,不是因为没有秦国富裕,而是没有秦国野蛮。楚被秦消灭,不是因为没有秦国有文化,而是没有秦国武力强盛。 
  
  一个人越富裕越怕死,越幸福越热爱生命。一个人越穷困,越不怕死。一个饿着肚子的人会比吃饱了的人狠。一个为有饭吃、有衣穿而发愁的人会比衣食无忧的人做战勇猛。一个强盗会比一个书生厉害。宋人太文明了,过惯了安逸而富裕的生活。宋兵很弱。有宋诗云:"父母生我时,教我学耕桑;不识官府严,安能事戎行!执枪不解刺,执弓不能射;团结我何为,徒劳定无益。"宋人是为生产、创造、和平而生的。蒙古人生下来是骑马、掠夺、战斗的。宋人人性大多是善的,蒙古人性大多是恶的。怎么可能战得过原始凶猛在血雨腥风中奔出来的蒙古铁蹄? 
  
  蒙古人的可怕在于它不只拥有原始游牧民族野蛮的战斗力,而且还拥有文明民族先进高超的技术。蒙古人攻打下一座城市,唯一留下的一种人,不是年轻美丽的女人,也不是天真的孩子,还不是年迈的老人,而是这座城市的工匠艺人。在古代蒙古人就好比在现代,它不仅具有阿富汗塔利班人不怕死的精神、还拥有美国人的原子弹等高科技武装技术。
  
  宋元之间的战争是中国历史上悬殊最大的民族战争。因为一个是正向资本主义发展的封建顶期文明,一个是刚形成的民族正处在原始时期的文明。 
  
  宋朝后期虽然武力相对较弱,但用它强大的综合势力,经济与文化侵略着辽国、金国等周边各国。促进了他们的汉化。推动了世界的发展与进步。辽国逐渐废除奴隶制及歧视汉人的政策,甚至辽道宗耶律洪基写下这样的句子:"开泰寺铸银佛,愿后世生中国!"苏东坡今天刚在宋出版的新书,明天就有可能在辽国的大街上叫卖流行。有苏东坡的亲弟弟苏辙出使辽国所做的诗为证 "谁将家集过幽都,逢见胡人问大苏。莫把文章动蛮貊,恐妨谈笑卧江湖。虏廷一意向中原,言语绸缪礼亦虔。顾我何功惭陆贾,橐装聊复助归田。"金国更是不折不扣宋文明的仰慕者。金国在北京的皇宫是完全仿照的宋朝汴梁的皇宫建造的。金国的皇帝穿着宋式的皇服,文官的品级和宋一样。金朝实行科举取士,孔子的四十九世孙也被金主封为公爵,金主亲自行礼祭祀孔子。自天文占测至编制历日和宫廷音乐,金人全都模仿应用宋制。金国还学宋国印制纸币。从金朝遗留下的铜钱就能看出金钱就是只有汉字的典型中国式铜币。从留存至今的卢沟桥的建筑风格及技术来看,金人已完全成为"中国"人了。金国用短短的几十年期间,掠夺吸取与学习了大量的宋的财富与文化。就从落后的原始文明进化到封建文明。到金国灭亡前期,实际上金国以与南宋差别已经不大了。金国成为宋朝之后当时世界上第二大富强的国家。但金国也在富强的生活中失去了曾经野蛮无比的战斗力。

  像朱熹一样的一大批知识份子开始是坚决的抗战派,拥护政府进攻收复国土。但后来看到两国和平的局面。逐渐成为保守派不主张用武力解决问题。不希望两国在大动干戈,破坏两国人们的安定和平的生活。不进行战争并不是少数人"苟且偷安",这是民心所向,是符合全民的利益。
 
  一个文明被消灭,并没有什么可丢人的。希腊、罗马虽都被野蛮所消灭,但他们的文明依然是西方人的骄傲!世界人民依然景仰他们所开创的文明高度。在西方没有人会污蔑希腊、罗马,也没有人会崇敬突厥、土耳奇。一个没有文化粗鲁厉害的强盗没有哪个国家哪个民族会景仰。而我们现在的有些中国人却有些怪,我们对代表中华文明顶峰的王朝大加污蔑与抨击,而对屠杀创造出人类历史上优秀先进高超文明的我们祖先的野蛮人而大加歌颂与美化。我们好象不知道谁是我们的祖先。很难想象现在的犹太人会崇拜希特勒,而辱骂贬低被希特勒屠杀的犹太先辈。而在中国正是这样……我们习惯于把冷血的强盗屠杀我们先辈的屠夫美化成大英雄!我们习惯污蔑与褥骂在世界上给中国带来太多荣誉与骄傲的伟大的宋朝。这世界上只有中国人热忠于谩骂自己的祖先,在西方你很难看到有西方人骂亚里士多德的。而在中国我们不只骂朱熹,还骂被我们祖先千百年来誉为圣人、在世界各国被尊为伟大思想家的孔子。作为一个中国人如果连孔子、朱熹都可以漫骂的人,那他还有什么事做不出来?他还是中国人吗?古希腊奥林匹克文明在世界、在中国依然继续发扬光大!而代表中国传统文化思想精髓的宋明理学却被中国人自己批得一无是处。现在的大部分中国人竟不知道自己祖先的好,优越与难得。我们被野蛮的屠杀斩断了中华文明的传承与连续性。我们还配称作我们是宋人的后代吗?
 
  一个国家及王朝的灭亡,不一定是因为它自身的腐朽及内政混乱、君主的昏庸、民不聊生。一个繁荣富强欣欣向荣的国家有可能是面对外部野蛮的力量一时战略决策的失误、一次的战争失败就有可能导致。宋朝的皇帝极其统治者是相对于其他王朝的统治者都是比较开明的有功绩的。宋朝的灭亡不是必然的而是偶然的。宋朝的灭亡有多方面的原因。宋朝也不是一个民族一个王朝之力一次打败的,而是多个民族与多个王朝一起之力多次打败的。蒙古是在灭了西辽、西夏、花刺子模等国,荡平中东、征服大半欧洲、统治大半世界、把宋朝的周边各国都归于其下之后才对世界上最繁华强大的宋国发动进攻的。宋人太文明,但使用先进的技术火药及战船把强大的蒙古联军钳制数十年之久。宋朝是在蒙古野蛮的铁蹄下坚持得最持久的国家。宋是文明的创造者,而蒙古是文明的掠夺者。宋人的失败是因为宋人太文明,宋朝的灭亡是因为宋朝发展得太快和当时野蛮的世界格格不入……这里只说了宋的好,没有说宋的不好。因为宋的不好众人皆知,已被教育宣传夸大。而宋的好却被忽视或被看成不好。宋被灭了,宋的好也被看做不好、被看做灭亡的原因。我们现在的人对宋朝的评价不公,我们对宋人不公,我们对我们的祖先不公。即使藐视东方文明傲慢的西方人面对宋朝的辉煌都不由自主的赞叹。为什么我们却蔑视我们古代的社会最顶峰的文明?但能够接触研究宋朝文明的西方人毕竟只是些极少数的人。难道我们的文明要靠别人来发掘吗?如果我们都不为我们的祖先说话,那要靠极少数的西方研究中国历史的专家学者说公道话吗?我们应该为宋朝对世界文明的贡献而自豪。我们应该为我们是宋人的后代感到骄傲。

2005年08月13日

                        1.真正爱你的男人,一下子说不出真正爱你的理由,只知道自己顾不上注意别人。
      2.真正爱你的男人,其实总惹你生气,你却发觉不了他到底做错了什么。
      3.真正爱你的男人,很少当面赞美你,可是心里肯定你是他最棒的。
      4.真正爱你的男人,会在你忘记回复他短信时狠狠地说你一顿。
      5.真正爱你的男人,只可能在你一个人的面前流眼泪,当你触摸到他时,也触摸到了
      那颗只为你跳动的心。
      6.真正爱你的男人,会默默地记住你不经意说过的话,在某时某刻重复它们。
      7.真正爱你的男人,不会轻易做出承诺,因为他想让自己成为你心中说话最算话的男
      子汉,只想给你最可靠最安全的幸福。
      8.真正爱你的男人,总告诉你不要胡思乱想,因为其实他在为你们谋划着最美丽真实
      的未来。同时让你无忧无虑地等待他要给你的惊喜。
      9.真正爱你的男人,可能不像你一样清楚地记得某些纪念日,他觉得爱你是每时每刻
      的,并不是靠这几天简单的日子。
      10.真正爱你的男人,不会轻易对你当面说“我爱你”,因为他为你做过的每件事都
      已经这么说了。除非在非常时刻,为了不让你无端地误解他。
      11.真正爱你的男人,总觉得有些话只说一遍就够了,因为你已经了解他的心。说得
      多了,他会觉得不珍贵。
      12.真正爱你的男人,如果他去机场接你,不会像你期望的那样捧着玫瑰大声叫“亲
      爱的”,只是自然地提过你的行李,然后想用眼睛抱紧你似的心疼地说,怎么瘦得像豆
      芽菜了?
      13.真正爱你的男人,当你发脾气时,只会不做声地听你把火发完,然后慢慢地说,
      你明天有课吗?早点睡吧。
      14.真正爱你的男人,不懂当你生气挂掉电话后应该立即打来,过了若干小时后会发
      条短信问你消气了没有?如果你质问他为何这么久才打来,他会理直气壮的说,你生气
      时我的解释一定没有用,等你的火消了,我的解释才有效果。
      15.真正爱你的男人,总是叫你小姑娘,可是每次他做什么重大的决定,却总想先听
      听你的建议。
      16.真正爱你的男人,不喜欢玩具小毛熊,却一直把你送他的小熊放在床头。
      17.真正爱你的男人,当和你发生争执时,总是控制不了地先妥协,先承认“我错
      了”,过后发来短信以“神经病”开头,以“宝贝”结尾。事实上你也清楚,这次是你
      有点无理取闹。
      18.真正爱你的男人,很想很想你时,也会买玫瑰送你,傻傻地等着你,却不知道自
      己捧的是月季。没关系,他的心里送的是玫瑰。
      19.真正爱你的男人,嘴巴都不甜,但是他的吻能传递他所有的热情。
      20.真正爱你的男人,当听到你对他讲很“酸”的话时,他反而会装得很正经,其实
      心里很甜很甜。
      21.真正爱你的男人,如果不能经常见到你,他会让自己忙碌起来,为了不去想你,
      因为他知道一想你将会一发不可收拾。

2005年07月25日

计算的方法很简单,将你们姓名笔划的总数作比较,以大的数字减小的 ,例如:大雄想知道自己和叮当的关系是什,要将自己名字的笔划(共15划)和叮当名字的笔划(共21划)相减(即21-15),得出的数字是6,「帮你的人」。 十分准确啊!快来试试吧! (算了一下璩美凤(40)和曾仲铭(32)的关系居然是8,真是超准!!)
  
  看了必须回贴,否则实际结果将与测试相反!!!!!!!!!
  
  (差值对照表:
  
  0 亲密无间
  1 永远和你在一起
  
  2 水火不相容
  3 知心朋友
  4 心上人
  5 帮你做事的人
  
  6 帮你的人
  7 面和心不合
  8 男女关系不正常
  9 情投意合
  10 关系马虎
  11 尊敬你的人
  12 爱你的人
  13 适合你的
  14 说你坏话的人
  15 克星
  16 救星
  17 忠心的人
  18 狼心狗肺的人
  19 单相思
  20 山盟海誓
  21 情敌
  22 服从你的人
  23 永远在一起
  24 伴终生
  25 恨你又爱你

2005年07月13日

一、打嗝
  
在吸进凉气或由于其他因素,可能会引起打嗝(打呃)不止。
  
[家庭应急处理]
(1)尽量屏气,有时可止住打嗝。
(2)让打嗝者饮少量水,尤其要在打嗝的同时咽下。
(3)婴儿打嗝时,可将婴儿抱起,用指尖在婴儿的嘴边或耳边轻轻搔痒,一般至婴儿发出笑声,打嗝即可停止。
(4)如打嗝难以止往,倘无特殊不适,也可听其自然,一般过会儿就会停止。如果长时间连续打嗝,要请医生诊治。中老年人或生病者突然打嗝连续不断,可能提示有疾患或病情恶化,需引起注意。


二、甲鱼咬手指
  
手指如被甲鱼(鳖)咬住,应保持镇静,切忌惊慌。更不能甩手或硬拽,这样甲鱼反而越咬越紧,甚至头缩进壳内。
  
[家庭应急处理]
  
(1)将甲鱼轻轻浸入水中,甲鱼即自动松嘴。或用头发丝或细草插入甲鱼头部两侧的小孔(这处部位是其耳部,非常敏感),也能立即奏效。
(2)解脱甲鱼后,被咬伤处可用75%酒精或红药水擦洗。
(3)如手指被咬破,应速去医院进一步处理。


三、脚踩铁钉
  
足部被铁钉刺进后,首先须立即把钉子完全拔除,然后进行下述应急处理。
  
[家庭应急处理]
  
(1)拔除钉子后,应挤出一些血液,因为钉子常扎得很深,容易感染。
(2)去除伤口上的污泥、铁锈等物,用纱布简单包扎后,速去医院进一步诊治。
(3)踩到细铁钉或铁针,如铁钉或铁针是断钉、断针,切勿丢弃,可将相同的钉针一起带到医院,供医生判断伤口深度作参考。
(4)扎进钉子,尤其是锈钉子、带泥土的钉子,最易患破伤风,须速去医院注射破伤风毒素。


四、脚跟磨破
  
长距离行走或所穿鞋不合脚、鞋底不平整等,极易引起脚跟磨破。
  
[家庭应急处理]
  
(1)如脚跟发红,可在袜子外面擦上一层肥皂,并在鞋子与脚跟接触的在方贴上一块胶布条,使脚跟避免进一步磨擦破溃。
(2)脚跟磨破且出现水疱时,水疱不要弄破,可用消毒纱布包扎后让其自行吸收;大水疱可用碘酒擦一次,消毒酒精擦二次,再用经过火烧消毒过的针尖刺破,用消毒纱布包好,注意清洁,防止感染。
(3)脚跟磨破时,应换穿舒适的鞋子,并尽量少走路。


五、流鼻血
  
流鼻血的原因很多,如外伤、挖鼻孔、气候异常、鼻炎、鼻病、高血压、妇女经期代谢性出血、各种原因的血小板减少、发热等。鼻血流不止时需迅速采取措施止血。
  
[家庭应急处理]
  
(1)将流血一侧的鼻翼推向鼻梁,并保持5~10分钟,使其中的血液凝固,即可止血。如两侧均出血,则捏住两侧鼻翼。鼻血止住后,鼻孔中多有凝血块,不要急于将它弄出,尽量避免用力打喷嚏和用力揉,防止再出血。
(2)左(右)鼻孔流血,举起右(左)手臂,数分钟后即可止血。
(3)患者左(右)鼻孔流血时,另一人用中指勾住患者的右(左)手中指根并用力弯曲,一般几十秒钟即可止血;或用布条扎住患者中指根,左(右)鼻孔流血扎右(左)手中指,鼻血止住后,解开布条。
(4)取大蒜适量,去皮捣成蒜泥,敷在脚心上,用纱布包扎好,可较快止血。
(5)让患者坐在椅子上,将双脚浸泡在热水中,可止鼻血。 (6)如经常流鼻血,需去医院进一步诊治。








六、门窗夹指
  
门窗、抽屉等夹手指看起来不是大病,但严重的指头被夹断、指甲脱落、关节内出血,如果不能及时妥善处理,会使伤情加重,后果恶化。
  
[家庭应急处理]
  
(1)如果夹伤较轻,只有轻微出血,可先行伤口周围消毒,再用消毒纱布包扎。
(2)夹伤较重,疼痛难忍,应于消炎包扎伤口后,再用厚纸板从指头下方支撑,缠上绷带加以固定,然后用三角巾将手臂吊起来持在脖子颈上。
(3)避免伤指浸水和过热。
(4)如青紫瘀血,压痛明显,不能活动,有可能指头骨折,应速去医院诊治。


七、皮肤晒伤

炎夏在户外活动,极易引起皮肤晒伤。出现此种情况,需及时正确处置。
  
[家庭应急处理]
  
(1)如皮肤晒得很红,但并未起泡,可用冷湿毛巾、纱布等敷于患处,或将患处浸泡于冷水中,以减轻疼痛。
(2)不可抹黄油或人造黄油之类的东西,以免刺激皮肤。
(3)如果皮肤起泡或大面积曝晒起泡,应速去医院治疗,切不可再曝露曝晒过的皮肤。
(4)在烈日下运动、工作时,要戴上宽沿的帽子,不要把皮肤曝晒在阳光下,必要时可涂敷防晒霜。


八、手指割破
  
手指被刀、玻璃、铁器等划伤割破,是日常生活中容易发生的事,如果不予重视或处理不当,可能会使伤口恶化,轻者发炎、疼痛,重者引发严重疾患。
  
[家庭应急处理]
  
(1)如伤口不大不深,出血不多,伤口干净,可用酒精消毒伤口周围,不要将消毒液弄进伤口内,待干后用消毒纱布覆盖包扎,或用创可贴粘贴。
(2)不干净的伤口,要先用碘酒沿周围皮肤消毒一次,再用酒精消毒二次,然后用加少量食盐的冷开水冲洗伤口,冲洗时用药棉轻轻擦拭伤口,去除泥土和其他异物,最后再对伤口周围的皮肤消毒一次,以纱布覆盖包扎。
(3)如果伤口切缘整齐并且干净,长度在2厘米之内,深度不超过1厘米,或虽不干净,但经过消毒处理后,在受伤后8小时内,可用创可贴或止血消炎贴粘合,使伤口合拢,促使其愈合。
(4)如无创可贴,也可用胶布覆盖伤口。但伤口切忌直接接触胶布。可在伤口上涂以消炎药等敷料,或衬以小块消毒纱布。
(5)为了防止感染,可以服些消炎药,如麦迪霉素每次0.2g,每日4次;或复方新诺明2片,每日2次。
(6)若伤口较深,接触泥土或脏物,还须速去医院注射破伤风抗毒素。


九、手足生茧、鸡眼、水泡
  
手足因干体力活或走远路等原因而致生茧、起水泡,以及足部生鸡眼,须根据不同情况采取不同的处理办法。
  
[家庭应急处理]
  
(1)在起水泡或水泡破开处放置消毒棉花、纱布等,以免受到刺激。
(2)不要撕掉水泡处死皮或硬茧,以免感染。
(3)在鸡眼处外敷鸡眼膏,每隔2~4日敷一次,直至鸡眼处皮肤变白脱落,然后用创可贴外敷1~2日即可。
(4)如手足水泡处疼痛剧烈,须去医院诊治。


十、贴胶布起水泡
  
有人粘贴胶布后,局部皮肤会出现红疹、水疱,并伴有瘙痒,有的甚至在揭下胶布时会撕掉一层表皮,灼痛难忍。如处理不当,则渗液不断,合并感染。
  
[家庭应急处理]
  
(1)用消毒的或火焰烧过的注射针头或缝衣针挑破水疱,使其渗液流尽,然后涂擦龙胆紫药水收敛消炎。
(2)腰背部的破损面容易受压和磨擦,内层还需覆盖一层凡士林纱布。
(3)可口服消炎药,如复方新诺明2片,每日2次;或抗过敏药息斯敏1片,每日1次。
(4)要避免用存放过久的胶布,揭胶布时切忌粗暴,尽可能防止人为的损伤。








十一、误吞异物
  
误吞异物后,应根据异物的形状大小特性,相应作出处理措施。
  
[家庭应急处理]
  
(1)误吞了钱币、珠子、纽扣、小石子、假牙等小而圆并且光滑的物体,一般均能通过肠道排出。可多吃些韭菜、芹菜之类的高纤维蔬菜,促进其排出。
(2)如吞咽了尖锐和直棱的物体,例如小发卡、骨头、开式别针等,则很危险,但决不可惊慌失措,而应速去医院,由医生用特殊器械取出异物。
(3)如误吞异物后出现腹痛、呕吐暗红色血或黑便,应及时行X线检查,并作相应处理。


十二、小腿肚抽筋
  
在游泳、夜间受凉、剧烈运动或过度疲劳情况下,小腿后侧的腓肠肌会突然疼痛、痉挛、僵硬,也就是人们日常所谓的小腿抽筋。出现这种情况,需正确、迅速处理,以免引起严重后果。
  
[家庭或临场应急处理]
  
(1)在小腿肚抽筋时,紧紧抓住抽筋一侧的脚大拇趾,使劲向上扳折,同时用力伸直膝关节,即可缓解。
(2)在运动中,尤其是游泳时,一旦发生小腿肚抽筋,万不可惊慌失措,否则会因处理不当抽筋更厉害,甚至造成溺水事故。此时应立即收起抽筋的腿,另一只腿和两只手臂划水,游上岸休息。如会浮水,可平浮于水上,弯曲抽筋的腿,稍事休息,待抽筋停止,立即上岸。也可吸气沉入水中,用手抓住抽筋一侧的脚大拇趾,使劲往上扳折,同时用力伸直膝关节,在憋不住气时,浮出水面呼吸;然后再沉入水中,重复上述动作;反复几次后,抽筋可缓解,然后急速游上岸休息;在游向岸边时,切忌抽筋一侧的腿用力过度,以免再次抽筋。在其他运动中发生小腿肚抽筋,应立即原地休息。
(3)抽筋停止后,仍有可能再度抽筋,千万不要剧烈活动和游泳,应注意休息。
(4)可按摩抽筋的小腿,渴些牛奶、橙汁等饮料。


十三、眼圈打青
  
眼圈打青,多由外伤引起,由于眼周血管丰富,眼周被打击后,很容易引起皮下血管破裂,而致红肿瘀血青紫。
  
[家庭应急处理]
  
(1)眼圈碰伤或打伤后,在24小时内,应用冰袋冷敷,或用毛巾浸透冰水外敷,以减轻伤痛和肿胀。
(2)24小时后,改用热敷,用毛巾浸湿热水外敷,促使眼圈瘀血尽快吸收。
(3)口服三七片、云南白药等。以活血化瘀止痛。
(4)如果疼痛不止或视力减退,患者应速去医院诊治。


十四、咬断体温表
  
咬断体温表的一般为孩子。在出现此种情况时,可作如下处理。
  
[家庭应急处理]
  
(1)让孩子用清水漱口,防止碎玻璃刺破口腔或被吞咽下。
(2)体温表内的水银为金属汞,它不会与鲜奶或蛋清的蛋白质结合,在肠道内也不会被吸收,所以是安全的,不必饮牛奶或蛋清。


十五、异物入鼻
  
鼻孔内进入异物,不能用手指抠鼻孔,也不能用探针之类的东西捅鼻孔,否则会把异物推向鼻孔深处,造成严重后果。
  
[家庭应急处理]
  
(1)如果异物塞进一侧鼻孔,可用纸捻、小草、头发等刺激另一侧鼻孔,使患者打喷嚏,鼻子里的异物会因此被喷出来。
(2)如上述方法无效,说明异物很大或堵塞很紧,须立即去医院诊治。








十六、异物入耳
    
耳朵进入异物,切不可用耳勺等尖锐物品伸入耳内掏挖,以免异物越陷越深,刺伤耳膜,引起严重后果。
  
[家庭应急处理]
  
(1)如小虫进入耳内,可用电灯(或手电筒)靠近耳朵照射外耳道,虫子喜光线,会顺着光线爬出来也可将卫生香的烟徐徐吹入耳内,虫子就会自动爬出。
(2)如果水液进入耳内,可用脱脂棉球把耳内水液吸出。也可让进水一侧的耳道向下,单脚踊跃,水液即或流出。
(3)小豆粒、小弹丸之类的东西进入耳内,可将身体弯向有异物的耳朵一侧,单脚踊跃,直至异物掉出。
(4)上述办法如果不能奏效,或耳朵内因有异物而致疼痛、发炎,应速去医院诊治。


十七、异物入眼
  
俗话说,“眼里揉不得沙子”眼睛里一旦进入异物,很是难受。出现此种情况不应惊慌,而应区别情况,慎重处理。
  
[家庭应急处理]
  
(1)当灰沙、昆虫、铁屑等进入眼内时,万勿揉眼睛,以免异物擦伤眼球或陷进组织。应轻轻将上眼皮向前拉起,使眼皮和眼球之间有一空隙,让泪水向下冲刷,有时几秒钟即可将异物排除,一次不行,可多做几次。
(2)如泪水冲不出异物,可轻闭眼睛,不要转动眼球,请别人把眼皮翻开,可发现异物粘附在眼皮内面。然后用棉签或干净的手帕蘸点凉开水轻轻将异物擦掉。如果找不到异物,可在电灯下或用手电筒照着寻找异物。如粘在角膜(黑眼珠)上,则应立即去医院请医生处理。切忌用指甲、火柴梗、铁丝等胡乱挑剔,以免造成更大的损伤和将病菌带入引起发炎。
(3)酸碱腐蚀性物质如氨水、生石灰(水)、盐酸、硫酸等进入眼内时,应立即在现场找到水源如自来水、井水、河水,迅速冲洗眼睛15分钟以上。具体方法:将上眼皮尽量拉开,用水壶等倾注水流,使水柱直接流过眼球表面,一定要冲洗到眼球、眼皮内侧,决不可闭眼冲洗;或用脸盆盛满水,将面部直接浸入水中,连续做睁眼闭眼动作,或用力睁大眼睛,头部在水中左右轻轻摆动。冲洗完后,立即去医院急诊。


十八、鱼刺卡喉咙
  
鱼刺卡喉咙时,不要慌张,也不能采用大口干咽饭团的办法,试图将鱼刺推压下去。这样做,细软的鱼刺可能侥幸被带进胃内,但大而坚硬的鱼刺有可能因此越扎越深,甚至刺破食管或大血管,造成严重的后果 。
  
[家庭应急处理]
  
(1)立即用汤匙或牙刷柄压住患者舌头的前部分,在亮光下仔细察看舌根部、扁桃体、咽后壁等,尽可能发现异物,再用镊子或筷子夹出。如病人咽部反射强烈,恶心剧烈而难以配合,则让病人作哈气动作,以减轻不适。
(2)如果实在找不到鱼刺,而患者仍觉得鱼刺卡在咽喉,可用下列方法软化鱼刺:
①威灵仙10克、乌梅3个、食醋少许、砂糖少许,煎汤,频频缓缓咽下。
②将橙皮切小块,口含慢慢咽下。
③维生素C片,含化2片,徐徐咽下。
(3)如上述方法仍无效,或吞咽后胸骨后疼痛,说明鱼刺在食管内,应当禁食,尽快去医院诊治。


十九、扎刺
  
手足扎刺后,须及时拔除,不宜留在肉里活动,以免越扎越深。
  
[家庭应急处理]
  
(1)将伤口消毒,并用火焰消毒过的针或镊子将刺全部拔出,然后再消毒一次,包扎好。
(2)如刺扎得很深,并断在肉里,或是带泥土的刺,则需去医院诊治,并注射破伤内抗毒素。
(3)扎刺易引起伤口化脓,需注意消毒。如刺拔除后,局部仍红肿不退,且越来越厉害,并疼痛、灼热等,说明伤口已有感染,应去医院进一步诊治。
  

2005年07月08日

北京腐败完全手册(一)



1.新街口的稻香春门脸,有个小极了的四川小吃店里的热干面一绝,好像只要两元五哟……

2.从地百北边的胡同串向后海,中途会有个小店,里面的锅贴一绝,也很便宜哟,两个MM吃,连汤不超过10元,绝值!  

3.六埔炕有一家用豆腐乳煮的毛豆……哈哈,绝对好吃,环境又干净  

4.首都剧院斜对面(往南斜)有个兰州牛肉面馆,门脸不大,卫生也一般,但味道真是不赖,4元一碗,在王府井那里算极便宜了。  

5.地安门十字路口的清真小吃店,那的豌豆黃(个人认为)北京最好吃……  

6.牛街卫生学校(绿顶)一带,陈记各式年糕(米的,面的,盆糕)豆面糕(驴打滚)爱窝窝,豌豆黄,糖卷果….旁边的烧羊肉,烧牛肉,出去CAMP带着吃,买一斤送一个火烧(要看买肉的老爷子的心情了)。  

7.台基厂梅园乳品店:奶酪 4.50元/碗,奶卷2.50/个,奶酪干35.00/斤(团结湖有分店)  
8.宣武门加油站,三巴汤火锅,28/人,锅底20.00(MAYBE),人多合适。  

9.稻香村的炒红果不赖。还有它的糯米酒加上鸡蛋做粥,很美容的。  

10.西直门地铁 西北口上来 右手 牛拉 一级棒 超级便宜 量足 狼吞指数 87  

11.东四四条口有一家国营饭馆,那里的卤煮火烧很棒!  

12.东单有一家叫“日昌”的茶餐厅,在协和医院对面的胡同里,那里经营的都是广东风味,和港产电视里的大排档差不多。那里的煲仔饭很好吃,饭量小点儿的俩人都吃不了!  

13.还有一家台湾的火锅店,叫“呷呷”。在北京的新世界商场,西单明珠,庄胜崇光百货,甘家口大厦……都有分店。不收锅底钱,关键是他们那儿调的酱味道很好。每个店的人都巨多,去晚了就得排队。  

14.三元乳品的连锁,饶世界都是!我以前看见从来就不进去,还当只卖牛奶和饮料呢,结果进去才知道,里面有许许多多的奶制品,你想的到的想不到的都有,尤其是那个杨梅豆腐,夏天吃那叫一个爽:不甜不腻、冰冰凉凉,还有一股极其解暑的杨梅味。我每次看见三元乳品的连锁必吃的几个:奶酪、酸奶、杨梅豆腐,冬天还会加些奶卷儿和奶酪干儿。唯一的缺点是不符合便宜的条件,属于比较FB的那一类!  

15.美术馆后街,有一家贵州饭馆,进门先上免费苦丁茶先。那里的米豆腐很香,吃米线5块钱管饱。  

16.我在北京城经常找云南菜吃,德胜门旁边冰窖口的云南饭馆是北京最早的一家,其次是魏公村民族大学后面的“宝勤”傣族菜馆,在北京算不错了。  

17.在宽街儿,离过客不远的地方有家傣家菜,就吃饭来说比较FB,但就味道和特色来说,很值!  

18.帽儿胡同口有家新疆馆子,里面的烤羊腿灰常不错;新街口买当老对角有个小面馆,凉面是我吃过的最好的;万寿路地铁口向北走10分钟,路东有个圆明华饭馆,水煮黄蜡丁,香;前门胡同里的炒肝和爆肚冯,好吃好吃;时刹海右岸的客家菜,不错;华堂对面小街里的烤串,小腰绝了;水锥子千叶大厦东边的湖南菜,解馋的很。。。。  

19.还有,朝阳门华普地下,到家尝有个什么老妈的小摊(忘记全名了),那的合勒面一绝!8元,价还行。

20.人大西门附近有个229服装店正对面的餐馆里的宫爆鸡丁是荔枝味的,爱甜的MM们有福了。

21.东四环,红领巾桥北,9路车总站对面“傻儿”火锅,燕京青岛免费随便喝,扎啤1.5元。  
22.地安门外的盾辉宾馆一层的餐馆,山楂粥,淡淡地酸甜,好喝!中国戏曲学院正门有家小馆的十锦炒饭,我这个极不爱吃炒饭的人都要叫绝!  

23.前门鲜鱼口内天仙居炒肝,北京头一份!价格便宜,才1.9一碗,正宗老字号!快去吧,加上4两包子也不过6、7块钱!!  

24.要说北京的云南菜,我认为还属云南驻京办事处云腾宾馆那里的地道。就在东便门旁边,那气锅鸡的味道,没的说,呵呵!!  

25.清华大学里,我家旁边,亚洲第一大食堂,3块钱吃饱,5块钱吃好,楼上楼下4层带滚梯,气派!!  

26. 豆腐乳—煮—-毛豆,,在安德路上,往东,过了七中的第二个路口,转弯处。  

27.地安门十子路口往北海后门方向有个很气派的面馆,羊肉烩面(好像叫这个)好吃,10元。  

28.在55路线上有个四环市场(听老妈说的),那的花生米有一种。。。。说不上是什么一道菜的味道,我朋友说是回锅肉(有一点像),10元3斤,绝好吃,下次有机会带上去过客让大家品尝。  

29.前门一带的廊坊二条的小肠陈的卤煮火烧,爆肚冯,甘家口的老北京杂酱面的豆汁……  
30.新街口的“新四川面馆”,上次去见大家都吃凉面,偶也就来了一碗——才4块,给的太多了。还有免费的粥(亦或是别的什么)可以喝的~~~

北京腐败完全手册(二)






31.另外有N多人喜欢吃傍边“老西安饭庄”的羊肉串,可是偶觉得太辣了一些。也不便宜,2块。  

32.说起凉面,阳光广场往北,眉州东坡小吃的凉面3元,好好吃,极好吃,无比的好吃……还有它的干绍面,地道……  还有香油冻糕,热热的和香油关系也不大,却好吃的要命……  那里全是3元5元的吃的,最贵是一扎西瓜汁8元,好喝!  就是量小,我每次要点两种面才够……哈哈哈,是不是太能吃了?  

33.京广中心的那个茶餐厅中的蛋塔也好好吃,反正我是百吃不厌……:))  

34.紫龙宾馆(现在叫渝信川菜),那里的樟茶鸭是我吃过的最好吃的。  具体位置应该是在宽街中医院对面那条胡同里的紫龙宾馆!  

35.在新街口附近(听说的,尚未有时间去证实)有家正点的回民馆子,正试营业期间,所有羊蝎子免费,容器比脸盆还大,据说好吃的连汤儿都一滴不剩,有兴趣的报名,让淫威请咱们吃–我多仗义,尽找便宜又实惠的!  

36.新街口豁口,老桂风米粉店,老字号,听说好吃极了……  

37.我也知道一地儿,驴肉火烧巨好吃,在大红门儿一带,具体位置说不清楚,反正我找得着。  

38.外馆斜街,花诚酒家的水煮鱼棒极了,辣嘴不辣喉咙!香,18元儿一斤!  隆重推出:黄花城下面最早的开张的仓坡扶饭庄,里面的虽然没有大厨。可是山村风味爽极,几乎都是美味,而且店里极为干净。现介绍几道我去那里必点的菜:  凉菜:水芥菜(只长在清泉或者干净的水边,正宗野菜,有点芥末的味道,清口)  驴蹄筋(是老板亲自做的,干净,味道极好)  热菜:松蘑炒肉(配料:松树下的蘑菇和新鲜猪肉,想想滋味吧)  摊柴鸡蛋(那叫一个香)  熬小鱼(黄花城水库的小鱼)  还有再点上一张家常饼,还等什么,暴撮吧!  

39.平安大街赵公口路口西南角有个贵州餐馆“竹笋情”,风味独特,进得门去先让你嗑瓜子,是那种最土制的瓜子,从葵花里抠出来就扔热锅里炒的那种,一开始我还懒得嗑,后来就停不了嘴;当然菜色也好,瓦片蒸腊肉、香肠(可以各来半份),竹笋菜,尤其笋干鸡汤,不赖。爱辣的同志不仿去尝尝,价格算合理吧。  

40.在崇文门哈德门饭店东侧(108车站再过去一点)有一个赣南饭店,只是一个比较小的饭馆,但里面的赣菜一绝,而且特别便宜,四、五个人吃饭点小炒鱼,酸菜肚尖,三杯鸡,炒米粉等菜(小份)加起来不超过60.00元。好吃极了。它门口有一个老北京,就沿街,非常好找。可以去试试。

41.后海南岸的“孔已己”,江南风味,散装黄酒,用锡壶温热了喝,爽!小菜做的也特地道!  

42.还有一处是祁家豁子55路总站,下车就是,跟住家屋门差不多大小的一个门脸儿,很正宗的西安风味,尤其是油泼面。全家吃饱吃好不超过20元。不过得看各人口味了,要喜欢吃西安面食的那真是踏破铁鞋无觅处啊。  

43.翠微大厦北头,马路东边有家煎饼店,种类丰富,不同于街边煎饼车上的那种,常常排大队的!和平门三千里烤肉附近有家小馆,卖一种“燃面”,乃宜宾特产,据说极香,不过不知具体位置。  

44.朝阳门,向南,二环外,富华大厦,东侧,胡同(东西走向)向东20米,在胡同北侧,有一小门脸,红色,名字忘了,专做肥肠,各种味道,非常棒!!!!!  

45.甘家口路口,东西走向方向,向西50米左右,路北(钓鱼台北门 往西斜),名字从没记过,牛肉拉面、凉面(夏季供应)、各式小菜、小碗牛肉,都特棒!!!!!我从高一的时候就在那里吃,到现在已经10年了,净是回头客。  

46.你们说的三元,在西四附近也有一家,在西四肯德鸡对面,门脸很小。  

47.西四环内,定慧寺桥往北,第一个路口向东,400米左右,路北,名字又不记得了,那里的春饼巨棒!!!!  

48.甘家口进口向左转50米处有一叫双龙的烤肉店,吃完终生难忘  

49.颐和园北宫门往西的一条路(通向青龙桥大桥),有一家“马记烧饼铺”,那里的烧饼夹肉3块一个,味道棒极了!!!!还有杂碎汤,如果不吃里面的杂碎只要汤是免费的。随便喝。  我可是从小就在那里吃了,别的地方的烧饼夹肉我看都不看了呢~~现在早上有很多去香山颐和园遛弯的老头老太太都钟情于那里~~  这家店上过《北京晚报》。有机会大家去TRY一下拉~~~~~~  

50.蓟门小区里有一个地方叫“独当一面”,里面有一种鸡腿饭,整只的鸡腿,油菜,西红柿还有一个煎蛋,爽急了!!!!11  

51.SOGO斜对面“妞妞饺子馆”。我从不吃饺子的可到了那……  

52.新街口,爱图美再住北,路西,有个重庆(也可能是成都)小吃店,很好吃,每次往那边溜达总要去吃……  

53.鼓楼东北角有一家小的露珠火烧店,  

54.宣武门,过了SOGO向南一公里,路西,有个小的牛肉拉面店  

55.东四7条东口向胡同内走100米,“朱家菜”味道不错,非常家常菜,好吃便宜!适合饿了的时候去!  

56.工人体育馆北门正对马路的北边有个“味正园”韩国烧烤,无烟碳烤味道绝好,便宜实惠,(两人吃好在50元左右,可吃到2-3种烤肉!)  

57.方庄家乐福对面有个刚记广州海鲜,很正宗的广州菜,大连鲍28一只,扇贝才3元一只,基围虾38一斤,开始时我也觉得那儿可能挺贵的,结果两个人150元都快撑死了。  

58.大觉寺的糯米藕北京一绝……这是货真价贵的一绝哟!吃了他那的,别处的就觉得根本没法吃了……  

59.世人个个学长年,不知长年在目前,我得宛丘平易法,只将食粥致神仙  宏状元,不论甜粥咸粥都好喝的没话说!  好几家店呢……车道沟啦,展览路啦,花园东路,安华西里一区什么的地方都有……我去的是它的伸粥店,西三环北路93号……。。  

60.西苑饭店旁十子路口东北角出租之家,有10多种热菜(现炒的小炒,味道绝对地道,有点怀旧的感觉,80年代中期菜馆的手艺,棒!量大)另外:凉菜、主食、汤自助,才8元/人。

61.隆重推出:北京第一家个人菜馆,绝对正宗北京家常菜。 就在一条幽深的小胡同里面,提示:(东城,胡同名字-翠花)  特色菜:五丝桶、蒜香肘子、沙锅丸子、扒白菜、红烧平鱼、京酱肉丝!  这个可是我好不容易才找到的!  好好享受吧!  

62.鼓楼地铁西南口出来有一家名为庆宾的涮肉味道一流,要早去晚了没位价格适中.  

63.全北京最爱的水煮鱼是:西坝河的红京鱼水煮鱼.地点在重庆饭店旁边的臭沟边,是总店,店面不大,不远处的远方饭店的一层,是另一家分店,分店对面有一个写着“台球”字样的门洞,进去后是另一个分店,所有的店在六点前订坐有效,过期作废,而且六点后要排位!最好一小份一小份的要,不要按整条买这样划算。

2005年06月28日


http://www.javaresearch.org/article/showarticle.jsp?column=106&thread=19240

这些天开发一个项目,服务器是tomcat,操作系统是xp,采用的是MVC架构,模式是采用Facade模式,总是出现乱码,自己也解决了好多天,同事也帮忙解决,也参考了网上众多网友的文章和意见,总算是搞定。但是好记性不如烂笔杆,所以特意记下,以防止自己遗忘,同时也给那些遇到同样问题的人提供一个好的参考途径:
(一)    JSP页面上是中文,但是看的是后是乱码:
解决的办法就是在JSP页面的编码的地方<%@ page language="java" contentType="text/html;charset=GBK" %>,因为Jsp转成Java文件时的编码问题,默认的话有的服务器是ISO-8859-1,如果一个JSP中直接输入了中文,Jsp把它当作ISO8859-1来处理是肯定有问题的,这一点,我们可以通过查看Jasper所生成的Java中间文件来确认
(二)    当用Request对象获取客户提交的汉字代码的时候,会出现乱码:
解决的办法是:要配置一个filter,也就是一个Servelet的过滤器,代码如下:
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;

/**
 * Example filter that sets the character encoding to be used in parsing the
 * incoming request
 */
public class SetCharacterEncodingFilter implements Filter {

    /**
     * Take this filter out of service.
     */
    public void destroy() {
    }
    /**
     * Select and set (if specified) the character encoding to be used to
     * interpret request parameters for this request.
     */
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain)throws IOException, ServletException {

    request.setCharacterEncoding("GBK");

    // 传递控制到下一个过滤器
    chain.doFilter(request, response);
    }

    public void init(FilterConfig filterConfig) throws ServletException {
    }
}
配置web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果你的还是出现这种情况的话你就往下看看是不是你出现了第四中情况,你的Form提交的数据是不是用get提交的,一般来说用post提交的话是没有问题的,如果是的话,你就看看第四中解决的办法。
还有就是对含有汉字字符的信息进行处理,处理的代码是:
package dbJavaBean;

public class CodingConvert
{   
 public CodingConvert()
 {
  //
 }
 public String toGb(String uniStr){
     String gbStr = "";
     if(uniStr == null){
   uniStr = "";
     }
     try{
   byte[] tempByte = uniStr.getBytes("ISO8859_1");
   gbStr = new String(tempByte,"GB2312");
     }
  catch(Exception ex){
    }
     return gbStr;
 }
   
 public String toUni(String gbStr){
     String uniStr = "";
     if(gbStr == null){
   gbStr = "";
     }
     try{
   byte[] tempByte = gbStr.getBytes("GB2312");
   uniStr = new String(tempByte,"ISO8859_1");
     }catch(Exception ex){
    }
    return uniStr;
 }
}
你也可以在直接的转换,首先你将获取的字符串用ISO-8859-1进行编码,然后将这个编码存放到一个字节数组中,然后将这个数组转化成字符串对象就可以了,例如:
String str=request.getParameter(“girl”);
Byte B[]=str.getBytes(“ISO-8859-1”);
Str=new String(B);
通过上述转换的话,提交的任何信息都能正确的显示。
(三)    在Formget请求在服务端用request. getParameter(“name”)时返回的是乱码;按tomcat的做法设置Filter也没有用或者用request.setCharacterEncoding("GBK");也不管用问题是出在处理参数传递的方法上:如果在servlet中用doGet(HttpServletRequest request, HttpServletResponse response)方法进行处理的话前面即使是写了:
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");
也是不起作用的,返回的中文还是乱码!!!如果把这个函数改成doPost(HttpServletRequest request, HttpServletResponse response)一切就OK了。
同样,在用两个JSP页面处理表单输入之所以能显示中文是因为用的是post方法传递的,改成get方法依旧不行。
由此可见在servlet中用doGet()方法或是在JSP中用get方法进行处理要注意。这毕竟涉及到要通过浏览器传递参数信息,很有可能引起常用字符集的冲突或是不匹配。
解决的办法是:
1) 打开tomcat的server.xml文件,找到区块,加入如下一行: 
URIEncoding=”GBK” 
完整的应如下: 
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 

2)重启tomcat,一切OK。
需要加入的原因大家可以去研究 $TOMCAT_HOME/webapps/tomcat-docs/config/http.html下的这个文件就可以知道原因了。需要注意的是:这个地方如果你要是用UTF-8的时候在传递的过程中在Tomcat中也是要出现乱码的情况,如果不行的话就换别的字符集。

(四)    JSP页面上有中文,按钮上面也有中文,但是通过服务器查看页面的时候出现乱码:
     解决的办法是:首先在JSP文件中不应该直接包含本地化的消息文本,而是应该通过<bean:message>标签从Resource Bundle中获得文本。应该把你的中文文本放到Application.properties文件中,这个文件放在WEB-INF/classes/*下,例如我在页面里有姓名,年龄两个label,我首先就是要建一个Application.properties,里面的内容应该是name=”姓名” age=”年龄”,然后我把这个文件放到WEB-INF/classes/properties/下,接下来根据Application.properties文件,对他进行编码转化,创建一个中文资源文件,假定名字是Application_cn.properties。在JDK中提供了native2ascii命令,他能够实现字符编码的转换。在DOS环境中找到你放置Application.properties的这个文件的目录,在DOS环境中执行一下命令,将生成按GBK编码的中文资源文件Application_cn.properties:native2ascii ?encoding gbk Application.properties Application_cn.properties执行以上命令以后将生成如下内容的Application_cn.properties文件:name=\u59d3\u540d age=\u5e74\u9f84,在Struts-config.xml中配置:<message-resources parameter="properties.Application_cn"/>。到这一步,基本上完成了一大半,接着你就要在JSP页面上写<%@ page language="java" contentType="text/html;charset=GBK" %>,到名字的那个label是要写<bean:message key=”name”>,这样的化在页面上出现的时候就会出现中文的姓名,年龄这个也是一样,按钮上汉字的处理也是同样的。
(五)    写入到数据库是乱码:
解决的方法:要配置一个filter,也就是一个Servelet的过滤器,代码如同第二种时候一样。
如果你是通过JDBC直接链接数据库的时候,配置的代码如下:jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&characterEncoding=GBK,这样保证到数据库中的代码是不是乱码。
如果你是通过数据源链接的化你不能按照这样的写法了,首先你就要写在配置文件中,在tomcat 5.0.19中配置数据源的地方是在C:\Tomcat 5.0\conf\Catalina\localhost这个下面,我建立的工程是workshop,放置的目录是webapp下面,workshop.xml的配置文件如下:
<!– insert this Context element into server.xml –>

<Context path="/workshop" docBase="workshop" debug="0"
reloadable="true" >

  <Resource name="jdbc/WorkshopDB"
               auth="Container"
               type="javax.sql.DataSource" />

  <ResourceParams name="jdbc/WorkshopDB">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>100</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>30</value>
    </parameter>

    
    <parameter>
      <name>maxWait</name>
      <value>10000</value>
    </parameter>

      <parameter>
     <name>username</name>
     <value>root</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value></value>
    </parameter>

    <!– Class name for mm.mysql JDBC driver –>
    <parameter>
       <name>driverClassName</name>
       <value>com.mysql.jdbc.Driver</value>
</parameter>
   <parameter>
      <name>url</name>
 <value><![CDATA[jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&characterEncoding=GBK]]></value>
    </parameter>
  </ResourceParams>

</Context>
粗体的地方要特别的注意,和JDBC直接链接的时候是有区别的,如果你是配置正确的化,当你输入中文的时候到数据库中就是中文了,有一点要注意的是你在显示数据的页面也是要用<%@ page language="java" contentType="text/html;charset=GBK" %>这行代码的。需要注意的是有的前台的人员在写代码的是后用Dreamver写的,写了一个Form的时候把他改成了一个jsp,这样有一个地方要注意了,那就是在Dreamver中Action的提交方式是request的,你需要把他该过来,因为在jsp的提交的过程中紧紧就是POST和GET两种方式,但是这两种方式提交的代码在编码方面还是有很大不同的,这个在后面的地方进行说明。3

以上就是我在开发系统中解决中文的问题,不知道能不能解决大家的问题,时间匆忙,没有及时完善,文笔也不是很好,有些地方估计是词不达意。大家可以给我意见,希望能共同进步。


posted @ 2005-01-29 01:32 moson 阅读(27) | 评论 (0)编辑 收藏
 
1.字节和unicode
    java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的。因此java要对这些字节流经行转化。char是unicode的,而byte是字节。java中byte/char互转的函数在sun.io的包中间有。其中ByteToCharConverter类是中调度,可以用来告诉你,你用的convertor。其中两个很常用的静态函数是 
public static ByteToCharConverter getDefault(); 
public static ByteToCharConverter getConverter(String encoding); 
如果你不指定converter,则系统会自动使用当前的encoding,gb平台上用gbk,en平台上用8859_1。
byte ——〉char:
 "你"的gb码是:0xc4e3 ,unicode是0×4f60
  String encoding = "gb2312";
  byte b[] = {(byte)’\u00c4′,(byte)’\u00e3′};
  ByteToCharConverter converter = ByteToCharConverter.getConverter(encoding);
  char c[] = converter.convertAll(b);
  for (int i = 0; i < c.length; i++) {
      System.out.println(Integer.toHexString(c[i]));
  }
 结果是什么?0×4f60
 如果encoding ="8859_1",结果又是什么?0×00c4,0×00e3
 如果代码改为
 byte b[] = {(byte)’\u00c4′,(byte)’\u00e3′};
 ByteToCharConverter converter = ByteToCharConverter. getDefault();
 char c[] = converter.convertAll(b);
 for (int i = 0; i < c.length; i++) {
    System.out.println(Integer.toHexString(c[i]));
 }
 结果将又是什么?根据平台的编码而定。

 char ——〉byte:
    String encoding = "gb2312";
    char c[] = {‘\u4f60′};
    CharToByteConverter converter = CharToByteConverter.getConverter(encoding);
    byte b[] = converter.convertAll(c);
    for (int i = 0; i < b.length; i++) {
       System.out.println(Integer.toHexString(b[i]));
    }
结果是什么?0×00c4,0×00e3
如果encoding ="8859_1",结果又是什么?0×3f
如果代码改为
String encoding = "gb2312";
    char c[] = {‘\u4f60′};
    CharToByteConverter converter = CharToByteConverter.getDefault();
    byte b[] = converter.convertAll(c);
    for (int i = 0; i < b.length; i++) {
       System.out.println(Integer.toHexString(b[i]));
    }
结果将又是什么?根据平台的编码而定。
很多中文问题就是从这两个最简单的类派生出来的。而却有很多类不直接支持把encoding输入,这给我们带来诸多不便。很多程序难得用encoding了,直接用default的encoding,这就给我们移植带来了很多困难。

2.utf-8
utf-8是和unicode一一对应的,其实现很简单
7位的unicode: 0 _ _ _ _ _ _ _ 
11位的unicode: 1 1 0 _ _ _ _ _ 1 0 _ _ _ _ _ _ 
16位的unicode: 1 1 1 0 _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 
21位的unicode: 1 1 1 1 0 _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 
大多数情况是只使用到16位以下的unicode: 
"你"的gb码是:0xc4e3 ,unicode是0×4f60
    0xc4e3的二进制:
          1100 ,0100 ,1110 ,0011
由于只有两位我们按照两位的编码来排,但是我们发现这行不通,因为第7位不是0因此,返回"?"
    0×4f60的二进制:
               0100 ,1111 ,0110 ,0000
         我们用utf-8补齐,变成:
               1110 ,0100 ,1011 ,1101 ,1010 ,0000
         e4–bd– a0
         于是返回:0xe4,0xbd,0xa0。

3.string和byte[]
string其实核心是char[],然而要把byte转化成string,必须经过编码。string.length()其实就是char数组的长度,如果使用不同的编码,很可能会错分,造成散字和乱码。
例如:
String encoding = “”;
byte [] b={(byte)’\u00c4′,(byte)’\u00e3′}; 
String str=new String(b,encoding);  
如果encoding=8859_1,会有两个字,但是encoding=gb2312只有一个字这个问题在处理分页是经常发生 。

4.Reader,Writer / InputStream,OutputStream
Reader和Writer核心是char,InputStream和OutputStream核心是byte。但是Reader和Writer的主要目的是要把char读/写InputStream/OutputStream。
例如:
文件test.txt只有一个"你"字,0xc4,0xe3
String encoding = "gb2312";
    InputStreamReader reader = new InputStreamReader(new FileInputStream(
        "text.txt"), encoding);
    char c[] = new char[10];
    int length = reader.read(c);
    for (int i = 0; i < length; i++) {
       System.out.println(c[i]);
    }
结果是什么?你
如果encoding ="8859_1",结果是什么???两个字符,表示不认识。
反过来的例子自己做。

5.我们要对java的编译器有所了解
javac ?encoding
我们常常没有用到encoding这个参数。其实encoding这个参数对于跨平台的操作是很重要的。如果没有指定encoding,则按照系统的默认encoding,gb平台上是gb2312,英文平台上是iso8859_1。
java的编译器实际上是调用sun.tools.javac.main的类,对文件进行编译,这个类有compile函数中间有一个encoding的变量,-encoding的参数其实直接传给encoding变量。编译器就是根据这个变量来读取java文件的,然后把用utf-8形式编译成class文件。
例子代码:
String str = "你";
    FileWriter writer = new FileWriter("text.txt");
    write.write(str);
    writer.close();

如果用gb2312编译,你会找到e4 bd a0的字段 ;
如果用8859_1编译, 00c4 00e3的二进制: 
0000,0000 ,1100,0100 ,0000,0000 ,1110,0011
因为每个字符都大于7位,因此用11位编码: 
1100,0001,1000,0100,1100,0011,1010,0011 
c1– 84– c3–  a3 
你会找到c1 84 c3 a3 。

但是我们往往忽略掉这个参数,因此这样往往会有跨平台的问题:
样例代码在中文平台上编译,生成zhclass
样例代码在英文平台上编译,输出enclass
  (1).  zhclass在中文平台上执行ok,但是在英文平台上不行 
  (2).    enclass在英文平台上执行ok,但是在中文平台上不行
原因:
  (1).    在中文平台上编译后,其实str在运行态的char[]是0×4f60, 在中文平台上运行,filewriter的缺省编码是gb2312,因此 chartobyteconverter会自动用调用gb2312的converter,把str转化成byte输入到fileoutputstream中,于是0xc4,0xe3放进了文件。 
但是如果是在英文平台下,chartobyteconverter的缺省值是8859_1, filewriter会自动调用8859_1去转化str,但是他无法解释,因此他会输出"?"
  (2).    在英文平台上编译后,其实str在运行态的char[]是0×00c4 0×00e3, 在中文平台上运行,中文无法识别,因此会出现??;
在英文平台上,0×00c4–>0xc4,0×00e3->0xe3,因此0xc4,0xe3被放进了文件。

6.    其它原因:<%@ page contentType="text/html; charset=GBK" %>
设置浏览器的显示编码,如果response的数据是utf8编码,显示将是乱码,但是乱码和上述原因还不一样。

7.    发生编码的地方
    从数据库到java程序 byte——〉char
    从java程序到数据库 char——〉byte
    从文件到java程序 byte——〉char
    从java程序到文件 char——〉byte
    从java程序到页面显示 char——〉byte
    从页面form提交数据到java程序byte——〉char
    从流到java程序byte——〉char
    从java程序到流char——〉byte

谢志钢的解决方法:
我是使用配置过滤器的方法解决中文乱码的:

<web-app>
  <filter>
    <filter-name>RequestFilter</filter-name>
    <filter-class>net.golden.uirs.util.RequestFilter</filter-class>
    <init-param>
      <param-name>charset</param-name>
      <param-value>gb2312</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>RequestFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
  </filter-mapping>
</web-app>


  public void doFilter(ServletRequest req, ServletResponse res,
                       FilterChain fChain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    HttpSession session = request.getSession();
    String userId = (String) session.getAttribute("userid");
req.setCharacterEncoding(this.filterConfig.getInitParameter("charset")); // 设置字符集?
实际上是设置了byte ——〉char的encoding
    try {
      if (userId == null || userId.equals("")) {
        if (!request.getRequestURL().toString().matches(
            ".*/uirs/logon/logon(Controller){0,1}\\x2Ejsp$")) {
          session.invalidate();
          response.sendRedirect(request.getContextPath() +
                                "/uirs/logon/logon.jsp");
        }
      }
      else { // 看看是否具有信息上报系统的权限
        if (!net.golden.uirs.util.UirsChecker.check(userId, "信息上报系统",
            net.golden.uirs.util.UirsChecker.ACTION_DO)) {
          if (!request.getRequestURL().toString().matches(
              ".*/uirs/logon/logon(Controller){0,1}\\x2Ejsp$")) {
            response.sendRedirect(request.getContextPath() +
                                  "/uirs/logon/logonController.jsp");
          }
        }
      }
    }
    catch (Exception ex) {
      response.sendRedirect(request.getContextPath() +
                            "/uirs/logon/logon.jsp");
    }
    fChain.doFilter(req, res);
  }





posted @ 2005-01-29 01:20 moson 阅读(40) | 评论 (0)编辑 收藏

2005年1月28日

明海棠文集之日期时间1.0

——–它不是原创,是一种思念

Java 语言的Calendar,GregorianCalendar (日历),Date(日期), 和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分. 日期是商业逻辑计算一个关键的部分. 所有的开发者都应该能够计算未来的日期, 定制日期的显示格式, 并将文本数据解析成日期对象。学习日期, 日期格式, 日期的解析和日期的计算。 

我们将讨论下面的类: 

1、  具体类(和抽象类相对)java.util.Date 

2、  抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat 

3、  抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar 

具体类可以被实例化, 但是抽象类却不能. 你首先必须实现抽象类的一个具体子类.

1.   java.util.Date及其格式化
Date 类从Java 开发包(JDK) 1.0 就开始进化, 当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了, 我们将在本文中进一步讨论它. 这种改进旨在更好的处理日期数据的国际化格式. 就象在JDK 1.1中一样, Date 类实际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从GMT(格林尼治标准时间)1970年, 1 月 1日00:00:00这一刻之前或者是之后经历的毫秒数. 

1.1. 创建java.util.Date
Java统计从1970年1月1日起的毫秒的数量表示日期。也就是说,例如,1970年1月2日,是在1月1日后的86,400,000毫秒。同样的,1969年12月31日是在1970年1月1日前86,400,000毫秒。Java的Date类使用long类型纪录这些毫秒值.因为long是有符号整数,所以日期可以在1970年1月1日之前,也可以在这之后。Long类型表示的最大正值和最大负值可以轻松的表示290,000,000年的时间,这适合大多数人的时间要求。

让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子. 这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间. 
import java.util.Date; 

public class DateExample1 { 

public static void main(String[] args) { 

// Get the system date/time 

Date date = new Date(); 

// 打印出具体的年,月,日,小时,分钟,秒钟以及时区

System.out.println(date.getTime()); 

}   



在星期六, 2001年9月29日, 下午大约是6:50的样子, 上面的例子在系统输出设备上显示的结果是 1001803809710. 在这个例子中,值得注意的是我们使用了Date 构造函数创建一个日期对象, 这个构造函数没有接受任何参数. 而这个构造函数在内部使用了System.currentTimeMillis() 方法来从系统获取日期. 

//1年前日期

   java.util.Date myDate=new java.util.Date();  

   long myTime=(myDate.getTime()/1000)-60*60*24*365;

   myDate.setTime(myTime*1000);

   String mDate=formatter.format(myDate);

//明天日期

   myDate=new java.util.Date(); 

   myTime=(myDate.getTime()/1000)+60*60*24;

   myDate.setTime(myTime*1000);

   mDate=formatter.format(myDate);

//两个时间之间的天数

   SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");

   java.util.Date date= myFormatter.parse("2003-05-1"); 

   java.util.Date mydate= myFormatter.parse("1899-12-30");

   long  day=(date.getTime()-mydate.getTime())/(24*60*60*1000);

//加半小时

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

java.util.Date date1 = format.parse("2002-02-28 23:16:00");

long Time=(date1.getTime()/1000)+60*30;

date1.setTime(Time*1000);

String mydate1=formatter.format(date1);

//年月周求日期

SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");

java.util.Date date2= formatter2.parse("2003-05 5 星期五"); 

SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");

String mydate2=formatter3.format(date2);

//求是星期几

mydate= myFormatter.parse("2001-1-1");

SimpleDateFormat formatter4 = new SimpleDateFormat("E");

String mydate3=formatter4.format(mydate);

 
 

 

1.2. Date格式化
能以一种用户明白的格式来显示这个日期呢? 在这里类java.text.SimpleDateFormat 和它的抽象基类 java.text.DateFormat。那么, 现在我们已经知道了如何获取从1970年1月1日开始经历的毫秒数了. 我们如何才format 就派得上用场了. 

// 我们能不能用下面的代码构件出 2001/8/8 8:8
    import java.io.*;
    import java.util.*;
 
    public class WhatIsDate
    {
        public static void main(String[] args) {
            Date date = new Date(2001, 8, 8, 8, 8, 8);
            System.out.println(date);
        }
    }
 

Java 的编译器竟然报如下信息 (Sun JDK1.3, Windows 2000 中文下)

注意:
WhatIsDate.java 使用或覆盖一个不鼓励使用的API。
注意:
使用-deprecation重新编译,以得到详细信息。!
 

那么 Date 对象究竟是为了满足哪个需求呢?看来它不是用来实现基于年/月/日小时:分钟 的时间表述。我们查看 Java 的文档,我们看到有 getTime() 方法,它返回的竟然是一个 long 值。

文档进一步又告诉我们这个值代表了当前系统的时间离1970/1/1 0:0 的毫秒差,而且是在 GMT 时区下(也被称为 EPOC)。如果我们指定的时间是在此之前的,那它将返回一个负数值。

这个发现让我们对 Date 对象有了一个全新的认识-Date 存放的是与 EPOC 的偏差值。换而言之我们也可通过 long 类型来表示时间?对了,这个猜想是得到了 Java 的支持:

   // 第二种获得当前时间的方法
    long dateInMilliSeconds = System.currentTimeMillis();
    // 这时候打印出的只是一串数字而已
    System.out.println(dateInMilliSeconds);
 

对程序执行效率敏感的程序员可以发现这个方法只是生成一个 Java 的原始类型 (primitive type) long, 不需要实例化一个对象。因此如果我们对时间的处理只是在内部进行时,可以用 long 来代替 Date 对象。

最典型的应用就是在一段代码开始和结束时,分别获得系统当前的时间,然后计算出代码执行所需的时间(微秒级)。

   long start = System.currentTimeMillis();
    // 代码段
    System.out.println("需要 "+(System.currentTimeMillis()-start)+" 微秒");
 

那么当我们要把这个 long 值已更为友好的表现形式显示处理的时候,我们可以用它来构造 Date 对象:

Date date = new Date(dateInMilliSeconds);

System.out.println(date);
 

我们看到了在 Java 中对时间最为基本的表示,有通过对EPOC 的偏差值进行处理。Date 对象是对它的一个对象的封装。我们同时也看到了,在现时世界中我们对时间的描述通常是通过"某年某月某日某时某分"来定义的。Date 的显示(实际上是 toString() 方法)描述了这些信息,但 Java 并不建议我们用这种方式直接来构件 Date 对象。因此我们需要找出哪个对象可以实现这个需求。这就是我们下面就要讲述的 Calendar 对象的功能。

在我们进一步研究 Calendar 之前,请记住 Date 只是一个对 long 值(基于 GMT 时区)的对象封装。它所表现出来的年/月/日小时:分钟时区的时间表述,只是它的 toString() 方法所提供的。千万不要为这个假象所迷惑。

假如我们希望定制日期数据的格式, 比方星期六-9月-29日-2001年. 下面的例子展示了如何完成这个工作: 

import java.text.SimpleDateFormat; 

import java.util.Date; 

public class DateExample2 { 

public static void main(String[] args) { 

SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy"); Date date = new Date(); 

System.out.println(bartDateFormat.format(date)); 

}

}
 

只要通过向SimpleDateFormat 的构造函数传递格式字符串"EEE-MMMM-dd-yyyy", 我们就能够指明自己想要的格式. 你应该可以看见, 格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的个数决定了日期是如何格式化的.传递"EE-MM-dd-yy"会显示 Sat-09-29-01. 请察看Sun 公司的Web 站点获取日期格式化选项的完整的指示. 

1.3. 文本数据解析成日期对象 
假设我们有一个文本字符串包含了一个格式化了的日期对象, 而我们希望解析这个字符串并从文本日期数据创建一个日期对象. 我们将再次以格式化字符串"MM-dd-yyyy" 调用SimpleDateFormat类, 但是这一次, 我们使用格式化解析而不是生成一个文本日期数据. 我们的例子, 显示在下面, 将解析文本字符串"9-29-2001"并创建一个值为001736000000 的日期对象. 

通过parse()方法,DateFormat能够以一个字符串创立一个Date对象。这个方法能抛出ParseException异常,所以你必须使用适当的异常处理技术。

例子程序: 

import java.text.SimpleDateFormat; 

import java.util.Date; 

public class DateExample3 { 

public static void main(String[] args) { 

// Create a date formatter that can parse dates of 

// the form MM-dd-yyyy. 

SimpleDateFormat bartDateFormat = new SimpleDateFormat("MM-dd-yyyy"); 

// Create a string containing a text date to be parsed. 

String dateStringToParse = "9-29-2001"; 

try { 

// Parse the text version of the date. 

// We have to perform the parse method in a 

// try-catch construct in case dateStringToParse 

// does not contain a date in the format we are expecting. 

Date date = bartDateFormat.parse(dateStringToParse); 

// Now send the parsed date as a long value 

// to the system output. 

System.out.println(date.getTime()); 

}catch (Exception ex) { 

System.out.println(ex.getMessage()); 

}




 

1.4. 使用标准的日期格式化过程 
既然我们已经可以生成和解析定制的日期格式了, 让我们来看一看如何使用内建的格式化过程. 方法 DateFormat.getDateTimeInstance() 让我们得以用几种不同的方法获得标准的日期格式化过程. 在下面的例子中, 我们获取了四个内建的日期格式化过程. 它们包括一个短的, 中等的, 长的, 和完整的日期格式. 

import java.text.DateFormat; 

import java.util.Date; 

public class DateExample4 { 

public static void main(String[] args) { 

Date date = new Date(); 

DateFormat shortDateFormat = DateFormat.getDateTimeInstance( 

DateFormat.SHORT, DateFormat.SHORT); 

DateFormat mediumDateFormat = DateFormat.getDateTimeInstance( 

DateFormat.MEDIUM, DateFormat.MEDIUM); 

DateFormat longDateFormat = DateFormat.getDateTimeInstance( 

DateFormat.LONG, DateFormat.LONG); 

DateFormat fullDateFormat = DateFormat.getDateTimeInstance( 

DateFormat.FULL, DateFormat.FULL); 

System.out.println(shortDateFormat.format(date)); System.out.println(mediumDateFormat.format(date)); System.out.println(longDateFormat.format(date)); System.out.println(fullDateFormat.format(date)); 





注意我们在对 getDateTimeInstance的每次调用中都传递了两个值. 第一个参数是日期风格, 而第二个参数是时间风格. 它们都是基本数据类型int(整型). 考虑到可读性, 我们使用了DateFormat 类提供的常量: SHORT, MEDIUM, LONG, 和 FULL. 要知道获取时间和日期格式化过程的更多的方法和选项, 请看Sun 公司Web 站点上的解释. 

运行我们的例子程序的时候, 它将向标准输出设备输出下面的内容: 
9/29/01 8:44 PM 
Sep 29, 2001 8:44:45 PM 
September 29, 2001 8:44:45 PM EDT 
Saturday, September 29, 2001 8:44:45 PM EDT 

2.   Calendar 日历类 
首先请记住 Calendar 只是一个抽象类, 也就是说你无法直接获得它的一个实例,换而言之你可以提供一个自己开发的 Calendar 对象。

那究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历、阴(农)历之分。它们的区别在哪呢?

比如有:

月份的定义 - 阳`(公)历 一年12 个月,每个月的天数各不同;阴(农)历,每个月固定28天,每周的第一天 - 阳(公)历星期日是第一天;阴(农)历,星期一是第一天

实际上,在历史上有着许多种纪元的方法。它们的差异实在太大了,比如说一个人的生日是"八月八日" 那么一种可能是阳(公)历的八月八日,但也可以是阴(农)历的日期。所以为了计时的统一,必需指定一个日历的选择。那现在最为普及和通用的日历就是 "Gregorian Calendar"。也就是我们在讲述年份时常用 "公元几几年"。Calendar 抽象类定义了足够的方法,让我们能够表述日历的规则。Java 本身提供了对 "Gregorian Calendar" 规则的实现。我们从 Calendar.getInstance() 中所获得的实例就是一个 "GreogrianCalendar" 对象(与您通过 new GregorianCalendar() 获得的结果一致)。

下面的代码可以证明这一点:

   import java.io.*;
    import java.util.*;
 
    public class WhatIsCalendar
    {
        public static void main(String[] args) {
            Calendar calendar = Calendar.getInstance();
            if (calendar instanceof GregorianCalendar)
                System.out.println("It is an instance of GregorianCalendar");
        }
    }
 

 

Calendar 在 Java 中是一个抽象类(Abstract Class),GregorianCalendar 是它的一个具体实现。

Calendar 与 Date 的转换非常简单:

   Calendar calendar = Calendar.getInstance();
    // 从一个 Calendar 对象中获取 Date 对象
    Date date = calendar.getTime();
    // 将 Date 对象反应到一个 Calendar 对象中,
    // Calendar/GregorianCalendar 没有构造函数可以接受 Date 对象
    // 所以我们必需先获得一个实例,然后设置 Date 对象
    calendar.setTime(date);
 
 

 

Calendar 对象在使用时,有一些值得注意的事项:

1. Calendar 的 set() 方法

set(int field, int value) - 是用来设置"年/月/日/小时/分钟/秒/微秒"等值

field 的定义在 Calendar 中

set(int year, int month, int day, int hour, int minute, int second) 但没有set(int year, int month, int day, int hour, int minute, int second, int millisecond) 前面 set(int,int,int,int,int,int) 方法不会自动将 MilliSecond 清为 0。

另外,月份的起始值为0而不是1,所以要设置八月时,我们用7而不是8。

calendar.set(Calendar.MONTH, 7);

我们通常需要在程序逻辑中将它清为 0,否则可能会出现下面的情况:

   import java.io.*;
    import java.util.*;
 
    public class WhatIsCalendarWrite
    {
        public static void main(String[] args) throws Exception{
            ObjectOutputStream out =
                new ObjectOutputStream(
                    new FileOutputStream("calendar.out"));
            Calendar cal1 = Calendar.getInstance();
            cal1.set(2000, 7, 1, 0, 0, 0);
            out.writeObject(cal1);
            Calendar cal2 = Calendar.getInstance();
            cal2.set(2000, 7, 1, 0, 0, 0);
            cal2.set(Calendar.MILLISECOND, 0);
            out.writeObject(cal2);
            out.close();
        }
    }
 

我们将 Calendar 保存到文件中

   import java.io.*;
    import java.util.*;
 
    public class WhatIsCalendarRead
    {
        public static void main(String[] args) throws Exception{
            ObjectInputStream in =
                new ObjectInputStream(
                    new FileInputStream("calendar.out"));
            Calendar cal2 = (Calendar)in.readObject();
            Calendar cal1 = Calendar.getInstance();
            cal1.set(2000, 7, 1, 0, 0, 0);
            if (cal1.equals(cal2))
                System.out.println("Equals");
            else
                System.out.println("NotEqual");
            System.out.println("Old calendar "+cal2.getTime().getTime());
            System.out.println("New calendar "+cal1.getTime().getTime());
            cal1.set(Calendar.MILLISECOND, 0);
            cal2 = (Calendar)in.readObject();
            if (cal1.equals(cal2))
                System.out.println("Equals");
            else
                System.out.println("NotEqual");
            System.out.println("Processed Old calendar "+cal2.getTime().getTime());
            System.out.println("Processed New calendar "+cal1.getTime().getTime());
        }
    }
 

然后再另外一个程序中取回来(模拟对数据库的存储),但是执行的结果是:

NotEqual
Old calendar 965113200422 <———— 最后三位的MilliSecond与当前时间有关
New calendar 965113200059 <———–/
Equals
Processed Old calendar 965113200000
Processed New calendar 965113200000
 
 

另外我们要注意的一点是,Calendar 为了性能原因对 set() 方法采取延缓计算的方法。在 JavaDoc 中有下面的例子来说明这个问题:

Calendar cal1 = Calendar.getInstance();
    cal1.set(2000, 7, 31, 0, 0 , 0); //2000-8-31
    cal1.set(Calendar.MONTH, Calendar.SEPTEMBER); //应该是 2000-9-31,也就是 2000-10-1
    cal1.set(Calendar.DAY_OF_MONTH, 30); //如果 Calendar 转化到 2000-10-1,那么现在的结果就该是 2000-10-30
    System.out.println(cal1.getTime()); //输出的是2000-9-30,说明 Calendar 不是马上就刷新其内部的记录
 

在 Calendar 的方法中,get() 和 add() 会让 Calendar 立刻刷新。Set() 的这个特性会给我们的开发带来一些意想不到的结果。我们后面会看到这个问题。

2. Calendar 对象的容错性,Lenient 设置

我们知道特定的月份有不同的日期,当一个用户给出错误的日期时,Calendar 如何处理的呢?

   import java.io.*;
    import java.util.*;
 
    public class WhatIsCalendar
    {
        public static void main(String[] args) throws Exception{
            Calendar cal1 = Calendar.getInstance();
            cal1.set(2000, 1, 32, 0, 0, 0);
            System.out.println(cal1.getTime());
            cal1.setLenient(false);
            cal1.set(2000, 1, 32, 0, 0, 0);
            System.out.println(cal1.getTime());
        }
    }
 

它的执行结果是:

   Tue Feb 01 00:00:00 PST 2000
    Exception in thread "main" java.lang.IllegalArgumentException
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:1368)
        at java.util.Calendar.updateTime(Calendar.java:1508)
        at java.util.Calendar.getTimeInMillis(Calendar.java:890)
        at java.util.Calendar.getTime(Calendar.java:871)
        at WhatIsCalendar.main(WhatIsCalendar.java:12)
 

当我们设置该 Calendar 为 Lenient false 时,它会依据特定的月份检查出错误的赋值。

3. 不稳定的 Calendar

我们知道 Calendar 是可以被 serialize 的,但是我们要注意下面的问题

   import java.io.*;
    import java.util.*;
 
    public class UnstableCalendar implements Serializable
    {
 
        public static void main(String[] args) throws Exception{
            Calendar cal1 = Calendar.getInstance();
            cal1.set(2000, 7, 1, 0, 0 , 0);
            cal1.set(Calendar.MILLISECOND, 0);
            ObjectOutputStream out =
                new ObjectOutputStream(
                new FileOutputStream("newCalendar.out"));
            out.writeObject(cal1);
            out.close();
            ObjectInputStream in =
                new ObjectInputStream(
                new FileInputStream("newCalendar.out"));
            Calendar cal2 = (Calendar)in.readObject();
            cal2.set(Calendar.MILLISECOND, 0);
            System.out.println(cal2.getTime());
        }
    }
 

 

运行的结果竟然是: Thu Jan 01 00:00:00 PST 1970

它被复原到 EPOC 的起始点,我们称该 Calendar 是处于不稳定状态。这个问题的根本原因是 Java 在 serialize GregorianCalendar 时没有保存所有的信息,所以当它被恢复到内存中,又缺少足够的信息时,Calendar 会被恢复到 EPOCH 的起始值。Calendar 对象由两部分构成:字段和相对于 EPOC 的微秒时间差。字段信息是由微秒时间差计算出的,而 set() 方法不会强制 Calendar 重新计算字段。这样字段值就不对了。

下面的代码可以解决这个问题:

   import java.io.*;
    import java.util.*;
 
    public class StableCalendar implements Serializable
    {
        public static void main(String[] args) throws Exception{
            Calendar cal1 = Calendar.getInstance();
            cal1.set(2000, 7, 1, 0, 0 , 0);
            cal1.set(Calendar.MILLISECOND, 0);
            ObjectOutputSt





简介

在计算机程序中精确的处理日期是困难的。不仅有显而易见的(英语: January, 法语: Janvier, 德语: Januar, 等)国际化需求, 而且得考虑不同的日期系统(并非所有的文化都用基督耶稣的生日作为纪年的开始)。如有高精度或非常大规模的时间需要被处理, 就有额外的方面需要被注意,比如闰秒或时间系统的变化。(公历(阳历, 格里高利历法)在西方被普遍接受是在1582年,但并非所有的国家在同一天接受!)

尽管有关于闰秒, 时区, 夏令时, 阴历的问题, 度量时间却是一个非常简单的概念: 时间的进行是线性的很容易被忽略。一旦时间轴的区域被定义, 任何时间点被从起点时间的流逝就可以确定。这和地理位置或当地时区是独立的 – 对任意指定的时间点, 对任意地区, 从起点的过程是相同的(忽略相对论的矫正)。


——————————————————————————–

可当我们试图根据某些日历解释这一时间点的时候困难来了, 比如, 根据月, 日, 或者年来表示它。在这一步上地理信息变得相关: 在时间上的同一个点对应不同的天的某一时间, 依赖于区域 (比如: 时区)。基于解释日期的修正经常是必要的(今天一个月以后是哪一天?) 并且增加了额外的困难: 上溢和下溢(12月15号的后一个月是下一年), 且不明确(1月30号后的一个月是哪一天?).

在最初的JDK 1.0, 一个时间点, 通过把它解释为java.util.Date类, 它被计算在一起来表示. 虽然相对容易处理, 但它并不支持国际化; 从JDK 1.1.4 或JDK 1.1.5, 多样的负责处理日期的职责被分配到以下类中:

java.util.Date
代表一个时间点.

abstract java.util.Calendar
java.util.GregorianCalendar extends java.util.Calendar
解释和处理Date.

abstract java.util.TimeZone
java.util.SimpleTimeZone extends java.util.TimeZone
代表一个任意的从格林威治的偏移量, 也包含了适用于夏令时(daylight savings rules)的信息.

abstract java.text.DateFormat extends java.text.Format
java.text.SimpleDateFormat extends java.text.DateFormat
变形到格式良好的, 可打印的String, 反之亦然.

java.text.DateFormatSymbols
月份, 星期等的翻译, 作为从Locale取得信息的一种替代选择.

java.sql.Date extends java.util.Date
java.sql.Time extends java.util.Date
java.sql.Timestamp extends java.util.Date
代表时间点, 同时为了在sql语句中使用也包含适当的格式.



注意: DateFormat 和相关的类在java.text.*包. 所有的java.sql.*包中日期处理相关类继承了java.util.Date类. 所有的其它类在java.util.*包中.

这些"新"类来自三个分离的继承层次, 其顶层类(Calendar, TimeZone, and DateFormat)是抽象的. 针对每一个抽象类, Java标准类库提供了一个具体的实现.

java.util.Date

类java.util.Date代表一个时间点. 在许多应用中, 此种抽象被称为"TimeStamp." 在标准的Java类库实现中, 这个时间点代表Unix纪元January 1, 1970, 00:00:00 GMT开始的毫秒数. 因而概念上来说, 这个类是long的简单封装.

根据此种解释, 类中仅有的没有过期的(除了那些毫秒数的get和set方法)是那些排序方法.

这个类依靠System.currentTimeMillis() 来取得当前的时间点. 因此它的准确度和精度由System的实现和它所调用底层(本质是操作系统)决定.

The java.util.Date API

在最初的 Date类使用中名字和约定引起了无尽的混淆. 然而用0-11计算月, 从1900计算年的决定模仿了C标准类库的习惯, 调用函数 getTime()返回起始于Unix纪元的毫秒数和 getDate()返回星期的决定显然是Java类设计者自己的.


java.util.Calendar

语义

Calendar代表一个时间点(一个"Date"), 用以在特定的区域和时区适当的解释器. 每一个Calendar 实例有一个包含了自纪元开始的代表时间点的long变量.

这意味着Calendar 不是一个(无状态) 变换者或解释器, 也不是一个修改dates的工厂. 它不支持如下方式:

Month Interpreter.getMonth(inputDate) or

Date Factory.addMonth(inputDate)

Instead, Calendar实例必须被初始化到特定的Date. 此Calendar实例可以被修改或查询interpreted属性.

奇怪的是, 此类的instances 总是被初始化为当前时间. 获得一个初始化为任意Date的Calendar 实例是不可能的—API强制程序员通过一系列的在实例上的方法调用, 比如setTime(date)来显式的设置日期.

访问Interpreted 字段和类常量

Calendar类遵从一不常用的方式来访问interpreted date实例的单个字段. 而不是提供一些dedicated属性 getters和setters方法(比如getMonth()), 它仅提供了一个, 使用一个标示作为参数来获取请求的属性的方法:

int get(Calendar.MONTH) 等等.

注意这个函数总是返回一个int!

这些字段的标示符被定义为Calendar类的public static final变量. (这些identifiers是raw的整数, 没有被封装为一个枚举抽象.)

除了对应这些字段标示(键值), Calendar 类定义了许多附加的public static final 变量来保存这些字段的值. 因此, 为测试某一特定date (由Calendar 的实例calendar表示) 是否在一年的第一个月, 会有像如下的代码:

if (calendar.get(Calendar.MONTH) == Calendar.JANUARY) {…}

注意月份被叫做 JANUARY, FEBRUARY, 等等, 不管location(相对更中性的名字比如: MONTH_1, MONTH_2, 等等). 也有一个字段UNDECIMBER, 被一些(非公历(阳历, 格里高利历法))日历使用, 代表一年的第十三个月.

不幸的是, 键值和值既没有通过名字也没分组成嵌套的inerface来区分.

处理

Calendar提供了三种办法来修改当前实例代表的日期: set(), add(), 和roll(). set()方法简单的设置特定的字段为期望的值. add() 和 roll() 的不同在于它们处理over- and underflows: add() 传递变更到"较小"或"较大"的字段, 而roll()不影响其它字段. 比如, 当给代表12月15号的Calendar实例增加一个月, 当add()使用年会增加, 但使用roll()不会发生任何变化. 为每一种case对应一个函数的决定的动机是, 它们可能在GUI中不同的使用情形.

由于Calendar的实现的方式, 它包含冗余的数据: 所有的字段都可以从给定的时区和纪元开始的毫秒数计算出来,反之亦然. 这个类为这些操作分别定义了抽象方法computeFields()和computeTime(), 又定义了complete()方法执行完全的来回旅程. 因为有两套冗余的数据, 这两套数据可能不同步. 根据类的JavaDoc文档, 当发生变更的时候依赖的数据以lazily 的方式重新计算. 当重新计算需要的时候, 子类必须维护一套脏数据标志作为符号.


——————————————————————————–

实现的Leakage

对于一个”新”的日期相关处理类, 不得不说实现的细节在某种程度上被泄漏到了API中. 在这点上, 这是它们有意用作基类的自定义开发的反映, 但它也偶然看出是不充分清晰设计一个公共接口的结果.Calendar 抽象是否维护两个冗余数据集合完全是一个实现的细节, 因而应当对客户类隐藏. 这也包括打算通过继承来重用此类.


附加的功能

Calendar基类提供的附加功能分成三类. 几个静态的工厂方法来获得用任意时区和locales初始化的实例. 如前面提到的, 所有以这种方式获得实例已经被初始化为当前时间. 没有工厂方法被提供来获得初始化为任意时间点的实例.

第二组包含before(Object)和after(Object)方法. 它们接受Object类型的参数, 因而允许这些方法被子类以任意类型的参数覆盖掉.

最后, 有许多附加的方法来获得设置附加的属性, 比如当前的时区. 当中有几个用以查询特定字段在当前Calendar实现下的可能和实际的最大、最小值.



java.util.GregorianCalendar



GregorianCalendar 是仅有可用的Calendar的子类. 它提供了基础Calendar抽象适合于根据在西方的习惯解释日期的实现. 它增加了许多public的构造函数, 也有针对于Gregorian Calendars的方法, 比如isLeapYear().



java.util.TimeZone 和 java.util.SimpleTimeZone



TimeZone类和其子类是辅助类, 被Calendar用以根据选择的时区来解释日期. 按字面意思来说, 一个时区表示加到GMT上后到当前时区的一定的偏移. 显然, 这个偏移在夏令时有效的时候会发生变化. 因而为了计算对于给定日期和时间的本地时间, TimeZone抽象不仅需要明白当DST有效时的额外偏移, 而且还需明白什么时候DST有效的规则.



抽象基类TimeZone 提供了基本的处理"raw"(没有考虑夏令时)实际偏移(用毫秒数!)的方法, 但任何关于DST规则的功能实现被留给了子类, 比如SimpleTimeZone. 后者提供了许多方法来指定控制DST开始和结束的规则, 比如在一个月中明确的某一天或某一天随后的周几. 每一个TimeZone 有一个可读的, 本地无关的显示名. 显示名以两种风格: LONG和SHORT呈现.

星期的开始?

Calendar的文档投入了相当的文字来正确的计算月或年中的weeks. weekday 被认为是一周的开始在因国家的不同而不同. 在美国, 一周通常被认为从周日开始. 在部分欧洲国家一周从周一开始结束于周日.这将影响到哪一周被认为是在一年(或月)第一个完整的周, 和计算一年的周数.


时区由一标示字符串明确的决定. 基类提供静态方法String[] getAvailableIDs()来获得所有已知安装(JDK内带有)的标准时区. (在我的安装内有557个, JDK1.4.1) 假如需要, JavaDoc 定义了严格的建立自定义时区标示符的语法. 也提供了静态工厂方法用以获取 — 指定ID或缺省的当前时区的TimeZone 实例. SimpleTimeZone提供了一些公有的构造函数, 奇怪的是对于一个抽象类, 如TimeZone. (JavaDoc 写到 "子类构造函数调用." 显然, 应该声明为protected.)

java.text.DateFormat

尽管Calendar和相关类处理locale-specific日期的解释,仍有DateFormat 类辅助日期和(人类)可阅读字符串之间的变换. 表示一个时间点时, 会出现附加的本地化问题: 不仅仅在语言, 而且日期格式是地区独立的(美国: Month/Day/Year,德国: Day.Month.Year, 等等). DateFormat 尽力地为程序员管理这些不同.

抽象基类DateFormat不需要(且不允许) 任意的, 程序员定义的日期格式. 作为替代, 它定义了四种格式化风格: SHORT, MEDIUM, LONG, 和FULL (以冗余增加的顺序).对一给定locale和style, 程序员可依靠此类获取适当的日期格式.

抽象基类DateFormat 没有定义静态方法来完成文本和日期之间的格式化和转换. 作为替代, 它定义了几个静态工厂方法来获取被初始化为给定locale和选定style的实例. 既然标准的格式化总是包含日期和时间, 附加工厂方法可用来获取仅处理时间或日期部分的实例. String format(Date)和Date parse(String) 方法然后执行变形. 注意具体的子类可以选择打破这种习惯.

在其内部使用, 解释日期的Calendar对象是可访问和修改的, TimeZone和NumberFormat对象也同样. 然而, 一旦DateFormat 被实例化locale和style就不能再修改.

亦有可用的(抽象的)用以拼接的字符串解析和格式化的方法, 分别接受额外的ParsePosition或FieldPosition参数. 这些方法的每一个都有两个版本. 一个接受或返回Date实例另一个接受或返回普通的Object, 来允许在子类中有选择性的处理Date. 它定义了一些以_FIELD 结尾的public static变量来标示多种可能和FieldPosition一起使用的变量(cf. java.util.Format的Javadoc).

仅有且最常用的DateFormat类的具体实现是SimpleDateFormat. 它提供了所有上述的功能, 且允许定义任意的时间格式. 有一套丰富语法来指定格式化模式; JavaDoc提供了所有细节. 模式可以被指定为构造函数的参数或显式的设置.

Printing a Timestamp: A Cut-and-Paste Example

想象你要用用户定义的格式打印当前的时间; 比如, 到log文件. 以下就是做这些的:

// 创建以下格式的模式: Hour(0-23):Minute:Second

SimpleDateFormat formatter = new SimpleDateFormat( "HH:mm:ss" );

Date now = new Date();

String logEntry = formatter.format(now);



// 从后端读入

try {

Date sometime = formatter.parse(logEntry);

} catch ( ParseException exc ) {

exc.printStackTrace();

}

注意需要被catch的ParseException. 当输入的字符串不能被parse的时候被抛出.


java.sql.*相关类

在java.sql.*包中的日期时间处理类都继承了java.util.Date. 事实上它们三个反映了三种标准SQL92模型的类型需要DATE, TIME, and TIMESTAMP.

像java.util.Date, SQL包中的这三个类是表示一个时间点的数字的简单封装. 分别地Date和Time类忽略关于一天中的时间或日历的日期.

可Timestamp类, 不仅包含到毫秒精度, 通常的时间和日期, 而且允许存储附加的精确到纳秒精度的时间点的数据. (纳秒是一秒的十亿分之一)

除了影射对应的SQL数据类型, 这些类处理与SQL一致的字符串表示的转换. 在这一点, 这三个类中的每一个覆盖了toString()方法. 此外, 每个类提供了静态的工厂方法, valueOf(String), 返回被初始化为传递参数字符串表示的时间的当前调用类的实例. 这三个方法的字符串表示的格式已被SQL标准选定, 且不能被程序员改变.

存储纳秒需要的额外数据, 没有很好的与在Timestamp中其它通常的时间和日期信息的表示一致. 比如, 在Timestamp实例上调用 getTime() 将返回自Unix纪元开始的毫秒数,忽略了纳秒数据. 简单地, 根据JavaDoc文档, hashCode() 方法在子类中没有被覆盖, 因而也忽略了纳秒数据.

java.sql.Timestamp的JavaDoc指出"inheritance relationship (…) 实际表示实现的继承, 而不是类型继承(这违反了继承的初衷). 但即使这句话是错误的, 既然Java没有私有继承的概念(也即继承实现). 所有java.sql.*包中的类应该被设计为封装一个java.util.Date对象, 而不是继承它, 仅暴露需要的方法 — 最起码, 方法比如hashCode() 应该被适当的覆盖.

最后一个评论是关于数据库引擎的时区的处理. 在java.sql.*包中的类不允许显式的设置时区. 数据库服务器(或驱动) 可自由的依据服务器server的当地时区解释这些信息, 且其可能被影响而变化(比如, 因为夏令时).

总结

通过前面的讨论, 很清楚, Java的日期处理相关类并非很复杂, 但是没有被很好设计. 封装被疏漏, APIs结构复杂且没有被很好的组织, 且非常见的思路经常被无缘由的使用. 实现更有其它的莫名奇妙(提议看看Calendar.getInstance(Locale)对于所有可用locale实际返回对象的类型!) 另一方面, the classes manage to treat all of the difficulties inherent in internationalized date handling and, in any case, are here to stay. 希望这篇文章对帮助你搞清它们的用法有所帮助.

Call Me By My True Names

As a last example of the wonderful consistency and orthogonality of Java’s APIs, I would like to list three (maybe there are more!) different methods to obtain the number of milliseconds since the start of the Unix epoch:

long java.util.Date.getTime()
long java.util.Calendar.getTimeInMillis() (New with JDK 1.4.1. Note that java.util.Calendar.getTime() returns a Date object!)
long java.lang.System.currentTimeMillis()