【问题标题】:Find week of a year given the date in mm/dd/yyyy给定日期,以 mm/dd/yyyy 为单位查找一年中的星期
【发布时间】:2012-08-12 02:01:07
【问题描述】:

我正在尝试查找某年某日期所在的那一周。我有一堆文件需要分类到“week1-2012”和“week34-2011”等文件夹中。我尝试搜索,但很多结果并没有真正帮助,因为我目前使用的是 perl v5.6.1,超级旧,我无法下载任何模块。我还发现此链接 (How do I calculate the week number given a date?) 很有趣,但我想知道如何轻松获得一年中的某一天和一周中的某一天。正在考虑获取月份,并添加适当的天数以找出一年中的哪一天。任何帮助,将不胜感激。我正在寻找的年份格式的一个例子是

//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

【问题讨论】:

    标签: perl date time dayofweek


    【解决方案1】:

    您可以使用核心模块:POSIXTime::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
    

    【讨论】:

    • 是的!你刚刚解决了我的问题。我忘了提到我无法安装模块的原因是因为这台工作计算机不会给我,我需要把这个程序带到另一台可能没有所需模块的电脑上。非常感谢!
    【解决方案2】:

    Perl 5.6.1 可以追溯到 2001 年 4 月。有人不给你现代工具来使用,让你的生活变得比需要的更艰难。我建议花一些时间来解决这个问题。

    如果您有 Perl 5.10 或更高版本,那么它将包含 Time::Piece 模块。你的问题就会变得微不足道。

    #!/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
    

    这周算作周一至周日,而不是周日至周六。

    【讨论】:

    • 是的,但我目前只使用一台临时计算机,直到技术支持修复我的常规计算机。
    • 同时您也乐于使用劣质工具?好的。这是你在浪费的生命:-)
    【解决方案3】:

    这是另一种解决方案,使用DateTime

    use strict;
    use warnings;
    use DateTime;
    
    my $dt=DateTime->now(time_zone=>"local");
    print $dt->week_number . "\n";
    

    输出当然是:

    33
    

    编辑:Of courseyou can download modules!如果没有别的,你可以复制并使用DateTime的相关代码。

    【讨论】:

    • 看来我在这个版本的 perl 上没有日期时间...但感谢您的帮助...
    • 再次声明:如果没有其他问题,您可以从DateTime复制并使用相关代码。它是开源的。这意味着您实际上可以查看源代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多