1)
use strict; use warnings; use Date::Calc qw(Add_Delta_YMD); my $startDate = '2000-01-01'; my ($startYear,$startMonth,$startDay) = $startDate =~ m/(/d-(/d)-/d)/; # 1 year,2 months,3 days,after startDate my $endDate = join('-',Add_Delta_YMD($startYear,$startDay,1,2,3)); 该模块有一个时间转换例程数量庞大,特别是那些三角洲处理。 |
2)
见 它将帮助您转换的日期和时间到一个简单的数字,这是UNIX时间(1月1日以来的秒数数字,1970年,我相信)。然后,只需减去3(天)24倍(在1小时)60倍(以1小时分钟)60次(在一分钟秒),或259200从这个数字秒,并使用 这可能是最好的解决办法*,因为它将处理的月份和年份自动改变。任何其他的解决方案将可能最终会被更多的检查后,看看我们跑出天1个月,或跑了几个月,一年保理复杂。
编辑:*之外的回顾 |
3)
日期::计算器可用于这些计算: #!/usr/bin/perl use strict; use warnings; use Date::Calc qw(Add_Delta_Days); my ( $yyyy,$mm,$dd ) = ( 2009,9,2 ); my @date = Add_Delta_Days( $yyyy,$dd,-3 ); print join( '-',@date ); |
4)
有这么多的选择,这是适度的尴尬。它在某种程度上取决于什么其他计算,您可能需要在未来,以及是否和时区的时间永远是一个因素,以及类似的东西。 你可以看看这些任何
是名副其实的三(套)模块。我建议 |
5)
整洁的事情了 use POSIX qw<mktime>; my ( $year,$month,$day ) = split '-',$date; my $three_day_prior = mktime( 0,$day - 3,$month - 1,$year - 1900 );
|
6)
这是简单, C:/>perl -MDate::Simple=today -e "print today()-3" 2009年8月30日 |
7)
DateTime的是典型的现代方式的Perl处理日期: use DateTime; my ($year,$day) = split '-','2009-09-01'; my $date = DateTime->new( year => $year,month => $month,day => $day ); $date->subtract( days => 3 ); # $date is now three days earlier (2009-08-29T00:00:00) / I3az / |
---------------------------------------------------------------------------------
Simply using POSIX::mktime with tricks.
sample code:
- use POSIX qw(mktime);
- my $date = ''200907;
- my ($year,$month) = (substr($date,4),substr($date,4,2));
- # mktime(sec,min,hour,mday,mon,year,wday=0,yday=0,isdst=-1)
- # perldoc POSIX -- to see more details
- # get time from the last day
- my $lastday_time = POSIX::mktime(
- 0,
- 0,$year-1900, # Tricks: set mday=0,mon (0=Jan.,11=Dec.)
- 0,-1
- );
- # get the string of the lasytday
- my $lastday = (localtime($lastday_time))[3];
- print $year. $month. $lastday. "/n";
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。