Unix时间戳转换Excel时间

Excel默认不支持Unix格式时间戳,这在导入数据时十分不便。可以用以下公式将时间戳转换成Excel格式的时间:

=(x+8*3600)/86400+70*365+19

其中x为时间戳的单元格,8*3600中的8为中国的时区。然后将公式单元格设置为日期时间格式即可。转换结果如下图: excel-timestamp.png

这个公式的原理:Excel的日期实际上是序列值,它以1900-1-1为1,每过一天序列值加1。 而Unix时间戳是从1970-1-1 0:00:00 UTC开始到现在经过的秒数。用x表示时间戳,可得到换算公式:

x+8*3600                    当前时区的时间(秒)
(x+8*3600)/86400            转换单位为天
(x+8*3600)/86400+70*365     加上1900到1970这七十年
(x+8*3600)/86400+70*365+19  闰年多出来的天数

细心的话你会发现,1900年到1970年共是17个闰年,考虑到Excel将1900-1-1当作1,那么公式最后应该加18才对, 为什么要加19?这是Excel中的一个bug——1900年也被当作闰年,因此应当再多加一天。

另外要注意,在Excel的工具->选项->重新计算中,有个1904年日期系统,如果勾选这个选项,上面的公式应当将70改为66,即

=(x+8*3600)/86400+66*365+19

(Read More)

Excel的闰年显示bug

今天在解决一个Excel问题时发现Excel中居然有1900年2月29日这一天。众所周知1900年是平年。没想到Excel中还会有这样的bug,真是开眼了。

来看看如何重现这个bug:首先新建一个工作表,在某个单元格输入1900/2/20,然后设置适当的日期格式,然后复制序列,即可发现序列中居然包含1900年2月29日这一天。这个问题会影响到1900/1/1到1900/3/1之间的日期计算和星期计算。 excel-bug.png

微软的官方说明中提到了这个bug,据说是为了某些程序的兼容性问题。可能这个问题是Lotus 1-2-3的bug,微软当年为了跟Lotus 1-2-3抢占市场就做了个完全兼容的Excel,从而把这个bug也一起继承了过来。

(Read More)

简单统计代码修改规模

如何统计代码的修改规模?如果肯花钱,则能买到统计代码修改规模的专业工具。这里介绍一种利用subversion和grep组合的方法简单统计代码修改规模。下面假设程序代码中的注释有两种格式,一种以 // 开头,另一种是Javadoc格式,即

/**
 * This is a function.
 * @param {String} v str
 */

为清晰起见,下面的统计命令分成了几行来写。

svn diff -r4:320                    # 获取rev4和rev320之间的差异
    | sed -e 's/\r//g'              # 删除行尾的换行符^M。Windows下必须
    | grep "^+[^+]"                 # 取得修改部分
    | grep -Ev "^+[[:space:]]*(\/\*)|(\*)|(\/\/)"     # 删除注释
    | grep -v "^+[[:space:]]*$"     # 删除空行
    | wc -l                         # 统计行数

(Read More)

诊治CSS布局的10张处方

原文在这里, 对于初学CSS布局的人也许会有很大的帮助。有经验的开发者在调试CSS布局时也能得到些启发。

  1. 检查HTML元素是否有拼写错误、是否忘记结束标记

    即使是老手也经常会弄错div的嵌套关系。可以用dreamweaver的验证功能检查一下有无错误。

  2. 检查CSS是否正确

    检查一下有无拼写错误、是否忘记结尾的 } 等。可以利用CleanCSS来检查 CSS的拼写错误。CleanCSS本是为CSS减肥的工具,但也能检查出拼写错误。

  3. 确定错误发生的位置

    如果错误影响了整体布局,则可以逐个删除div块,直到删除某个div块后显示恢复正常, 即可确定错误发生的位置。

  4. 利用border属性确定出错元素的布局特性

    使用float属性布局一不小心就会出错。这时为元素添加border属性确定元素边界, 错误原因即水落石出。

  5. float元素的父元素不能指定clear属性

    MacIE下如果对float的元素的父元素使用clear属性,周围的float元素布局就会混乱。 这是MacIE的著名的bug,倘若不知道就会走弯路。

  6. float元素务必指定width属性

    很多浏览器在显示未指定width的float元素时会有bug。所以不管float元素的内容如何, 一定要为其指定width属性。

    另外指定元素时尽量使用em而不是px做单位。

  7. float元素不能指定margin和padding等属性

    IE在显示指定了margin和padding的float元素时有bug。 因此不要对float元素指定margin和padding属性 (可以在float元素内部嵌套一个div来设置margin和padding)。 也可以使用hack方法为IE指定特别的值。

  8. float元素的宽度之和要小于100%

    如果float元素的宽度之和正好是100%,某些古老的浏览器将不能正常显示。 因此请保证宽度之和小于99%。

  9. 是否重设了默认的样式?

    某些属性如margin、padding等,不同浏览器会有不同的解释。 因此最好在开发前首先将全体的margin、padding设置为0、列表样式设置为none等。

  10. 是否忘记了写DTD?

    如果无论怎样调整不同浏览器显示结果还是不一样,那么可以检查一下页面开头是不是忘了写下面这行DTD:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    

(Read More)

如何利用PayPal发送付款请求

PayPal的付款请求可以直接发到客户的电子邮件,即使客户没有PayPal帐户, 也可以直接通过信用卡付款。今天试着用PayPal发了一次,结果出现了下面的错误。

paypal-1.png

想了半天百思不得其解,后来才明白,原来付款人的邮件地址注册了贝宝(PayPal中文版)帐户, 因此系统认为该邮件地址仅能发送人民币,而我要求的是日元,自然就出现了上面的错误。 解决方法很简单,换个其他的邮件地址即可。

发送付款请求的具体方法如下。

(Read More)

利用delegate调试Ajax应用

最近一直在开发Ajax应用程序。众所周知Ajax的特点是客户端和服务器分离, 客户端通常由纯Javascript组成,通过XMLHttpRequest对象与服务器通信。 在调试客户端代码时,如果服务器开在本地,尚可通过samba等方式直接编辑 服务器上的客户端js代码,倘若服务器在异地,那么每次修改js代码后通过FTP等 方式上传之后再调试就十分费事。说到这里自然会想到将js代码放到本地, 然而XMLHttpRequest却只能访问同一域名下的URL,本地的js代码无法直接使用 远程服务器上的服务。

迷茫之际,同事介绍了delegate这款软件,利用它即可实现本地调试客户端代码。

delegate可以在这里下载。 delegate实际上是一个功能强大的代理服务器,它有个类似于Linux的mount功能, 能够将Internet上的URL映射到本地。利用这个功能, 即可将远程的服务器端和本地的客户端集成到同一个域名下, 实现客户端代码的本地调试。

方法如下:

  1. 将Apache配置到本机的8080端口,然后将客户端代码放在htdocs下, 使之能够通过 http://localhost:8080/client/ 访问。

  2. 下载delegate并解压缩。

  3. 编辑以下的配置文件 delegate.cfg。

     -P80
     ADMIN="yourname@yourmail.com"
     MOUNT="/client/* http://localhost:8080/client/*"
     MOUNT="/cgi-bin/* http://server-address/cgi-bin/*"
    

    第一行的 -P80 指定delegate使用80端口;第二行的ADMIN定管理员邮件地址, 可以随意设置;第三行将客户端映射到 delegate 的 /client/ 路径下; 第四行将远程服务器目录映射到 delegate 的 /cgi-bin/ 路径下。~ 另外,如果你需要通过代理服务器访问远程服务器,可以这样设置:

     MOUNT="/cgi-bin/* http://server-address/cgi-bin/*" PROXY="代理服务器地址:端口"
    
  4. 在命令行输入以下命令安装delegate。注意不同版本的delegate的可执行文件名不同。

     dg9.4.1.exe +=delegate.cfg
    
  5. 打开浏览器,访问 http://localhost/client/。这样即可随时看到对js代码的修改。

实际上,用好这个方法还可以“盗用”许多网站的服务,即自己开发客户端, 再通过 delegate 将请求转发给服务器。其方法不再详述。

(Read More)

Opera升级?

今天打开Opera发现Opera又升级了。不过这次版本号跳得好快啊,实在是钦佩Opera的开发者们。原来的版本是9.02,这次居然是…… opera90-2.png

取消之后再次检查更新,还好这次版本号正常了。 opera9-10.png

(Read More)

Tab Effect: 3D的Firefox

或许很多人已经知道这个插件了吧,Tab Effect。它能让你的Firefox在切换标签时使用类似于Linux下的Compiz的3D效果。看看下面的截图。

tab-effect.png

装上以后感觉原来的设置切换速度有点慢,打开插件目录下 content/javascript.js,寻找这一段代码:

if(TabEffect.currentTab != gBrowser.selectedTab){
    var back = currentTabIndex > gBrowser.mTabContainer.selectedIndex || currentTabIndex == -1;
    TabEffect.xpcomObj.translateToNextTab(back, 24);
    TabEffect.currentTab = gBrowser.selectedTab;
}

translateToNextTab(back, 24)中的24改成12,重新启动Firefox,可以看到旋转速度快了许多。不过在切换页面时有明显的延迟,使这个插件减色不少。不过总的来说,这个插件还是值得推荐的,它带来了插件开发的一个新思路。

该最新版本为1.1,仅有Windows版,需要DirectX 8支持。

ps. 如何找到插件目录?我使用的是Mr Tech Local Install,安装该插件之后,在插件管理面板上选中想要查看的插件点右键,选择浏览安装目录就可以了。要是没有安装该插件,那就在 C:\Documents and Settings\用户名\Application Data\Mozilla\Firefox\Profiles\nnnnnn.default\extensions 目录下一个个找吧。

(Read More)

网站设计: Vista风格的新主题

花了一个小时时间做了这个新的网站主题。本以为能很快搞定的,结果在细节部分用了比较多的时间。侧边栏的颜色有些不协调,没时间改了。

不多说了,先上图看看效果吧。具体能不能用CSS实现以后再说吧。

inspiremedia-design-vista.jpg

感谢frank提供背景照片,我先用着了,回头跟你打招呼

(Read More)

十招教你远离病毒

我从大学时使用电脑到现在已有将近八年的历史了,期间病毒也遇到过不少,但从来没遇到什么麻烦。 总结一下经验,下面的十条可以让你远离病毒的烦恼。

系统安装盘多多益善

不管你是用Windows XP,还是Windows 2000,甚至更老的Win98, 安装盘至少要有两张以上。仅有一张盘则很容易坏掉或丢掉。

系统崩溃时要有办法恢复数据

我通常用CDLinux作为启动盘,即使Windows系统崩溃了,使用CDLinux启动系统也能将里面的数据复制出来。 如果你不会用Linux,就把重要数据都放在FAT32分区上,崩溃时用Win98的启动盘恢复数据。 据说ntfsdos能读取NTFS分区,不过我从来没成功过。不要用WindowsXP的恢复控制台, 因为(1)功能太弱 (2)不支持网络,即使能恢复数据也没法拷出来 (3)登录时需要管理员密码, 如果Windows的用户数据库损坏就无法登录了 (4)太脆弱,注册表坏掉就无法登录。

(Read More)