PERL常见问题解答--FAQ(4)--Data: Dates

转载 2006年06月19日 17:22:00
How do I find the week-of-the-year/day-of-the-year? How can I compare two date strings? How can I take a string and turn it into epoch seconds? How can I find the Julian Day? Does Perl have a year 2000 problem?

How do I find the week-of-the-year/day-of-the-year?

The day of the year is in the array returned by localtime() (see localtime):


    $day_of_year = (localtime(time()))[7];

or more legibly (in 5.004 or higher):


    use Time::localtime;
    $day_of_year = localtime(time())->yday;

You can find the week of the year by dividing this by 7:


    $week_of_year = int($day_of_year / 7);

Of course, this believes that weeks start at zero.



How can I compare two date strings?

Use the Date::Manip or Date::DateCalc modules from CPAN.



How can I take a string and turn it into epoch seconds?

If it's a regular enough string that it always has the same format, you can split it up and pass the parts to timelocal in the standard Time::Local module. Otherwise, you should look into one of the Date modules from CPAN.



How can I find the Julian Day?

Neither Date::Manip nor Date::DateCalc deal with Julian days. Instead, there is an example of Julian date calculation in, which should help.



Does Perl have a year 2000 problem?

Not unless you use Perl to create one. The date and time functions supplied with perl (gmtime and localtime) supply adequate information to determine the year well beyond 2000 (2038 is when trouble strikes). The year returned by these functions when used in an array context is the year minus 1900. For years between 1910 and 1999 this happens to be a 2-digit decimal number. To avoid the year 2000 problem simply do not treat the year as a 2-digit number. It isn't.

When gmtime() and localtime() are used in a scalar context they return a timestamp string that contains a fully-expanded year. For example, $timestamp = gmtime(1005613200) sets $timestamp to ``Tue Nov 13 01:00:00 2001''. There's no year 2000 problem here.



PERL常见问题解答--FAQ(4)--Data: Numbers

Why am I getting long decimals (eg, 19.9499999999999) instead of the numbers I should be getting...
  • Hank_Huang
  • Hank_Huang
  • 2006年06月19日 17:19
  • 715

PERL常见问题解答--FAQ(4)--Data: Strings

How do I validate input? The answer to this question is usually a regular expression, perhaps with a...
  • Hank_Huang
  • Hank_Huang
  • 2006年06月19日 17:33
  • 934


我如何作 (任何事)? 如何以互动的方式使用 Perl? 有 Perl shell吗? 如何替我的 Perl程式除虫? 如何检测 (profile)我的 per...
  • Hank_Huang
  • Hank_Huang
  • 2006年06月19日 17:06
  • 1583


Perl是什麽? 谁对 perl提供支援?由谁负责发展?它为什麽是免费的? 我该用哪一个版本的 Perl? perl4和 perl5各代表什麽? Perl的发展...
  • Hank_Huang
  • Hank_Huang
  • 2006年06月19日 17:00
  • 801


哪些平台上有 Perl?要到哪里去找? 要如合取得以执行档形式发行的 Perl? 我的系统里没有 C编译器。要如何编译 perl? 我直接将 Perl的执行档从一台机器...
  • Hank_Huang
  • Hank_Huang
  • 2006年06月19日 17:02
  • 950

SQLite FAQ常见问题解答

7.容量限制 string/BLOB: 1,000,000,000 最大列数量:2000 (谁要真的用到成千上百的列,直接跳楼算了) SQL语句最大长度:1,000,000 (如需插...
  • zhlf91718
  • zhlf91718
  • 2014年08月05日 18:39
  • 250

Solaris常见问题解答 (FAQ)

Q:SOLARIS7为64位,是不是意味着我不能在以前的机器(32位)上使用呢? A:不是的,SOLARIS7仍然支持sun4c,sun4m,sun4d甚至sun4u体系的32位核心。 Q:关机前为什...
  • zcatlinux
  • zcatlinux
  • 2004年10月29日 11:09
  • 1355

Subversion FAQ(常见问题解答)

常见问题:为什么会有这样一个项目? Subversion是私有软件吗?我听说它是属于CollabNet公司的。 Subversion用在我的项目上是否足够稳定? Subversion的客户端/服务器在...
  • lxt2lili
  • lxt2lili
  • 2009年08月05日 12:50
  • 1519

液晶显示器 常见问题解答(FAQ)

一问:何为液晶?     答:液晶是一种介于固体与液体之间,具有规则性分子排列的有机化合物,一般最常用的液晶型式为向列(nematic)液晶,分子形状为细长棒形,长宽约1nm~10nm,在不同电流电场...
  • yysmall
  • yysmall
  • 2005年07月13日 18:10
  • 1558


1 、什么类型的网站最需要 CDN ?   答: 我们请第三方公司对我们的 CDN 做了性能测试, 测试结果表明, 从 ISP 分类 来看, 教育网的用户使用 CDN 后提速最为明显, 访问速度可以提...
  • orichisonic
  • orichisonic
  • 2016年01月18日 18:08
  • 270
您举报文章:PERL常见问题解答--FAQ(4)--Data: Dates