Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 以mm/dd/yyyy为日期查找一年中的一周_Perl_Date_Time_Dayofweek - Fatal编程技术网

Perl 以mm/dd/yyyy为日期查找一年中的一周

Perl 以mm/dd/yyyy为日期查找一年中的一周,perl,date,time,dayofweek,Perl,Date,Time,Dayofweek,我在努力寻找某一年中某个日期出现的那一周。我有一堆文件需要分类到“week1-2012”和“week34-2011”等文件夹中。我尝试过搜索,但很多结果并没有真正起到帮助作用,因为我目前使用的是PerlV5.6.1,非常旧,而且我无法下载任何模块。我也发现这个链接()很有趣,但我想知道如何轻松地获得一年中的某一天和某一周。正在考虑获取月份,并添加适当的天数来确定一年中的哪一天。任何帮助都将不胜感激。我正在寻找的年份格式的一个例子是 //year 2012 S M T W R F S

我在努力寻找某一年中某个日期出现的那一周。我有一堆文件需要分类到“week1-2012”和“week34-2011”等文件夹中。我尝试过搜索,但很多结果并没有真正起到帮助作用,因为我目前使用的是PerlV5.6.1,非常旧,而且我无法下载任何模块。我也发现这个链接()很有趣,但我想知道如何轻松地获得一年中的某一天和某一周。正在考虑获取月份,并添加适当的天数来确定一年中的哪一天。任何帮助都将不胜感激。我正在寻找的年份格式的一个例子是

//year 2012
S  M  T  W  R  F  S
            1  2  3    <-- week #1 
4  5  6  7  8  9 10    <-- week #2 //came from the link

//dec year 2011
S   M  T  W  T  F  S
27 28 29 31            <-- week #52 or 53, not to sure the actual week
//2012年
S M T W R F S

1 2 3您可以使用核心模块:
POSIX
Time::Local

1.将日期解析为(秒、分、时、日、月、年)

2.将日期转换为秒(历元)

3.使用函数strftime从当前日期获取周数

use strict;
use Time::Local;
use POSIX qw(strftime);

my $date = '08/15/2012';
my ($month, $day, $year) = split '/', $date;

my $epoch = timelocal( 0, 0, 0, $day, $month - 1, $year - 1900 );
my $week  = strftime( "%U", localtime( $epoch ) );

printf "Date: %s № Week: %s\n", $date, $week;
输出

Date: 08/15/2012 № Week: 33

以下是另一种解决方案,使用:

当然,输出是:

33

编辑:如果没有其他内容,您可以从2001年4月开始的
DateTime
Perl 5.6.1中复制并使用相关代码。有人不给你现代化的工具让你的生活变得更加艰难。我建议花点时间解决这个问题是值得的

如果您有Perl5.10或更高版本,那么它将包括模块。你的问题会变得微不足道

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use Time::Piece;

my $date = '08/15/2012';

my $dt = Time::Piece->strptime($date, '%m/%d/%Y');

say $dt->strftime('week%W-%Y');
运行它可以提供:

$ ./week 
week33-2012

本周计算为周一至周日,而非周六。

是!!!你刚刚解决了我的问题。我忘了提到我不能安装模块的原因是因为这台工作计算机不会给我,我需要把这个程序带到另一台可能没有所需模块的电脑上。非常感谢!看来我在这个版本的perl上没有datetime…但是感谢您的帮助…再说一遍:如果没有其他内容,您可以从
datetime
复制并使用相关代码。它是开源的。这意味着您可以查看源代码。是的,但我目前只使用一台临时计算机,直到我的常规计算机被技术支持人员修复。同时,您还乐于使用劣质工具吗?好啊你浪费的是你的生命:-)
$ ./week 
week33-2012