2012-08-15 10 views
5

Estoy tratando de encontrar la semana en la que cae una fecha, en un determinado año. Tengo un montón de archivos que deben ordenarse en carpetas como "week1-2012" y "week34-2011". Intenté buscar pero muchos de los resultados realmente no me ayudan porque actualmente estoy usando perl v5.6.1, soy muy viejo y no puedo descargar ningún módulo. También encontré este enlace (How do I calculate the week number given a date?) de interés, pero me preguntaba cómo conseguiría el día del año y la semana fácilmente. Estaba pensando en obtener el mes y agregando la cantidad apropiada de días para averiguar el día del año. Cualquier ayuda sería apreciada. Un ejemplo del formato años Busco esBuscar la semana de un año dada la fecha en mm/dd/aaaa

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

Respuesta

7

Puede utilizar módulos básicos: POSIX y Time::Local

1.parse su fecha de (seg, min, h, mday, mes, año)

2.Convert su fecha de segundos (época) función

3.use strftime para obtener semana a partir de la fecha actual

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; 

SALIDA

Date: 08/15/2012 № Week: 33 
+0

¡¡SÍ !!! Acabas de resolver mi problema. Me olvidé de mencionar que la razón por la que no pude instalar los módulos es porque esta computadora de trabajo no me la dará, y necesito llevar este programa a otra PC que podría no tener los módulos requeridos. ¡Gracias una tonelada! – imakeitrayne

+0

de nada :) –

3

Aquí hay una solución alternativa, utilizando DateTime:

use strict; 
use warnings; 
use DateTime; 

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

La salida es, por supuesto:

33 

Editar:Of courseyou can download modules! Si nada de lo contrario, puede copiar y usar el código correspondiente de DateTime.

+0

Parece que no tengo fecha y hora en esta versión de perl ... pero gracias por la ayuda ... – imakeitrayne

+0

Nuevamente: si nada más, puede copiar y usar el código correspondiente de 'DateTime'. Es de código abierto. Eso significa que en realidad ** puedes ver la fuente **. –

3

Perl 5.6.1 data de abril de 2001. Alguien te está haciendo la vida mucho más difícil de lo que debería ser al no darte herramientas modernas para usar. Sugiero que vale la pena dedicar algo de tiempo a solucionar ese problema.

Si tenía Perl 5.10 o superior, entonces incluiría el módulo Time::Piece. Y tu problema sería trivial.

#!/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'); 

Correr da:

$ ./week 
week33-2012 

Esto cuenta la semana como LD, no Sun-SAT.

+0

Sí, pero actualmente estoy usando solo una computadora temporal hasta que mi conexión normal haya sido reparada por soporte técnico. – imakeitrayne

+1

Y mientras tanto, ¿está contento de trabajar con herramientas inferiores? De acuerdo. Es tu vida la que estás perdiendo :-) –

Cuestiones relacionadas