• Publicidad

Formateo fecha tipo DATE en Postgresql

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Formateo fecha tipo DATE en Postgresql

Notapor reLlene » 2013-01-02 13:31 @605

Tengo dos (y puede que exista una tercera) variables con formato 20120131 y necesito formatearlas de manera tal de mostrarlas con el siguiente formato: '31-01-2012' por tratarse de información que necesito insertar a una base de datos (PostgreSQL).

El punto es que dichas variables (fechas) son todas distintas y no logro conseguir algo polimórfico que me las resuelva de ¡¡¡UN SOLO ZASS!!! Me refiero que haga el formateo correspondiente independientemente de que éstas sean distintas y no hacer algo cómo lo siguiente (que es con lo que cuento).

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # formateo de fechas ('Anio-Mes-Dia')
  2.  
  3.  # $header[22] es una de las variables mencionadas...
  4.  my $anio_fecha = substr($header[22],0,4);
  5.  my $mes_fecha = substr($header[22],-4,2);     
  6.  my $dia_fecha = substr($header[22],6);
  7.  my $fecha = $dia_fecha.'-'.$mes_fecha.'-'.$anio_fecha;
  8.        
  9.  # $footer[23] es la otra...
  10.  my $anio_vtocae = substr($footer[23],0,4);
  11.  my $mes_vtocae = substr($footer[23],-4,2);    
  12.  my $dia_vtocae = substr($footer[23],6);       
  13.  my $fechavtocae = $dia_vtocae.'-'.$mes_vtocae.'-'.$anio_vtocae;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


NOTA: el tipo de datos de los campos donde van a parar dichas variables son de tipo DATE con una longitud de 15.

Supuse en un principio que con la función sprintf podría conseguir algo que resulte pero no fue el caso. :x Cualquier sugerencia es bienvenida. :D

¡¡¡Saludos!!!
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344

Publicidad

Re: Formateo fecha tipo DATE en Postgresql

Notapor explorer » 2013-01-02 14:16 @636

Hay varias maneras, pero la tuya también funciona, así que no entiendo por qué dices que no se puede aplicar ese método a las tres variables... Solo tienes que aplicar el método a cada variable.

Otro método: usando unpack() (desempaquetado)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3.  
  4. my $fecha;
  5.  
  6. $fecha = "20120131";
  7.  
  8. say "$fecha => ", formatea_fecha($fecha);
  9.  
  10. sub formatea_fecha {
  11.     my $fecha = shift;
  12.     my @fecha = unpack "A4 A2 A2", $fecha;    # tres campos, de 4, 2 y 2 caracteres
  13.  
  14.     return join '-', @fecha[2,1,0];           # nueva fecha formateada
  15. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Otra solución: con expresiones regulares.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3.  
  4. my $fecha;
  5.  
  6. $fecha = "20120131";
  7.  
  8. say "$fecha => ", formatea_fecha($fecha);
  9.  
  10. sub formatea_fecha {
  11.     my $fecha = shift;
  12.     my @fecha = $fecha =~ /(....)(..)(..)/;   # tres campos, de 4, 2 y 2 caracteres
  13.  
  14.     return join '-', @fecha[2,1,0];           # nueva fecha formateada
  15. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


De todas maneras... ¿para qué quieres hacer eso? El formato de fecha 20120131 sigue la norma ISO 8601, lo cual es ideal para el intercambio de datos con otros sistemas, o simplemente, para el procesamiento de estructuras internas (fíjate que las fechas en ese formato se pueden ordenar numéricamente, sin realizar ninguna transformación). Convertirlo a 31-01-2012 solo tiene sentido si son fechas que van a salir a pantalla o web, para que lo lea un humano, pero para nada más.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Formateo fecha tipo DATE en Postgresql

Notapor reLlene » 2013-01-02 15:52 @703

¡¡GENIAL, explorer!! No me percaté de hacer el llamado a una sub cómo tu lo haces, sólo estaba tirando las tres líneas con la función substr() por CADA variable que recibía :lol:

No sólo me sirvió ver que la mía funciona sino, ahora, tener en cuenta las otras formas de resolverlo como tu lo has expuesto.

La idea es que estas fechas se muestren vía web ya que generan unas facturas y su posterior impresión a papel.

Te agradezco una vez más, hermano.

¡¡¡ Un saludo cordial !!! :wink:
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 12 invitados

cron