Ubuntu 中的编程语言(中),ubuntu编程语言
在上一篇随笔中介绍了十种编程语言。这次介绍四种编程语言:Perl、PHP、Pascal 和 Delphi。
Perl
Perl 语言在2010年6月编程语言排行榜中排名第八位。下面就是 GregorianTest.pl 程序:
use Time::Piece;
use Time::Local;
use Time::Seconds;
my $dt = localtime(timelocal(0, 0, 0, 4, 10 - 1, 1582));
print $dt."\n";
$dt += ONE_DAY;
print $dt."\n";
Ubuntu 操作系统中已经预装了 Perl。解释执行:
运行结果和 .NET 平台的编程语言一样。
此外,还可以使用 cpan 命令来安装 DateTime 模块:
下面就是使用 DateTime 模块的 GregorianTest2.pl 程序:
use DateTime;
my $dt = DateTime->new(year=>1582, month=>10, day=>4);
print $dt->day_abbr." ".$dt->ymd."\n";
$dt->add(days=>1);
print $dt->day_abbr." ".$dt->ymd."\n";
解释执行:
运行结果还是和仅使用 Perl 核心模块的程序一样,没有什么改善。
PHP
PHP 语言在2010年6月编程语言排行榜中排名第四位。下面就是 GregorianTest.php 程序:
<?php
$date = new DateTime();
echo $date->getTimezone()->getName()."\n";
echo $date->format('D Y-m-d')."\n";
$date->setDate(1582, 10, 4);
echo $date->format('D Y-m-d')."\n";
$date->add(new DateInterval('P1D'));
echo $date->format('D Y-m-d')."\n";
?>
安装 PHP 客户端工具,可以作为交互窗口(使用 --interactive 或者 -a 参数),也可以解释执行:
非常奇怪,PHP 语言的 DateTime 类居然认为1582年10月4日是星期二,既不是正确的星期四,也不是把格里历外推到1582年10月15日之前而得到的星期一。如果有哪位朋友知道这是什么原因,请在评论中告诉我。谢谢!
此外,PHP 语言还有和历法相关的函数。下面就是 GregorianTest2.php 程序:
<?php
function writeline($cal, $jd)
{
$dt = cal_from_jd($jd, $cal);
$info = cal_info($cal);
echo $dt["abbrevdayname"]." ".$dt["date"];
echo "\tdays from 4713-01-01 B.C.: ".$jd;
echo "\t".$info["calname"];
echo "\n";
}
$jd = cal_to_jd(CAL_JULIAN, 10, 4, 1582);
writeline(CAL_JULIAN , 0);
writeline(CAL_JULIAN , 1);
writeline(CAL_JULIAN , $jd);
writeline(CAL_GREGORIAN, $jd + 1);
writeline(CAL_JULIAN , $jd + 1);
?>
解释执行:
注意,在 GregorianTest2.php 程序中必须由用户自己指定使用儒略历还是格里历。
PHP 语言主要应用是服务端,是 LAMP (Linux + Apache + MySQL + PHP, or Perl, or Python) 的重要组成部分,用于架设动态网站。
Pascal
Pascal 语言在2010年6月编程语言排行榜中排名第十五位。下面就是 GregorianTest.pas 程序:
Program GregorianTest(output);
type
StringArray = array[0..6] of string[3];
var
t: TimeStamp;
a: StringArray;
procedure Init;
begin
a[0] := "Sun";
a[1] := "Mon";
a[2] := "Tue";
a[3] := "Wed";
a[4] := "Thu";
a[5] := "Fri";
a[6] := "Sat";
end;
begin
Init;
GetTimeStamp(t);
WriteLn(a[t.DayOfWeek], ' ', Date(t));
t.Year := 1582;
t.Month := 10;
t.Day := 4;
t.DayOfWeek := 4;
WriteLn(a[t.DayOfWeek], ' ', Date(t));
end.
安装 GNU Pascal,编译和运行:
在 GNU Pascal 中,我没有找到计算某一日期是星期几的函数,也没有找到计算某一日期的下一天的函数。程序之所以能够正确输出星期四,是由于在 GregorianTest.pas 程序的第24行对 DayOfWeek 字段进行了赋值。
Delphi
Delphi 语言在2010年6月编程语言排行榜中排名第十位。下面就是 GregorianTest2.pas 程序:
Program GregorianTest2;
Uses sysutils;
var
t: TTimeStamp;
procedure WriteLine(t: TTimeStamp);
begin
Write(FormatDateTime('ddd yyyy-mm-dd', TimeStampToDateTime(t)));
Writeln(' days past 0001-01-01: ', t.Date);
end;
Begin
t := DateTimeToTimeStamp(EnCodeDate(1, 1, 1));
WriteLine(t);
t := DateTimeToTimeStamp(EnCodeDate(1582, 10, 4));
WriteLine(t);
t.Date := t.Date + 1;
WriteLine(t);
t := DateTimeToTimeStamp(Now);
WriteLine(t);
t.Date := t.Date + 1;
WriteLine(t);
End.
安装兼容 Delphi 的 Free Pascal,编译和运行:
非常奇怪,Free Pascal 的 Date/Time routines 居然认为1582年10月4日是星期六,既不是正确的星期四,也不是把格里历外推到1582年10月15日之前而得到的星期一。而且更奇怪的是,它认为1582年10月4日星期六的下一天是1582年10月5日星期五,从星期六倒退回星期五了。如果有哪位朋友知道这是什么原因,请在评论中告诉我。谢谢!
更多的编程语言将在下一篇随笔中介绍。
参考资料
评论暂时关闭