Formato de Fechas CSV

05/09/2007 - 16:29 por César G. | Informe spam
Muy buen día a tod@s

Mi consulta es la siguiente; de un archivo de texto deseo obtener un listado
de fechas deliminandolo en un archivo *.csv (por comas), pero al abrirlo
tengo el inconveniente de que las fechas no las respeta con el formato en el
que estan almacenadas, tengo fechas correctas de 16/08/2007 ... pero cuando
llega al día 1 de Septiembre lo guarda como 09/01/2007 es decir sería 09 de
Enero 2007

¿Cuál sería la mejor forma de guardar/almacenar/ordenar los datos en el
archivo csv y que no dependa de la configuración regional o la configuración
de Excel?

podría ser

dd-mm-yyyy
mm/dd/yyyy
dd/mm/yyyy <-- esta es la forma en que las almaceno


La configuración regional de mi pc es Español(México), la fecha corta esta
en dd/mm/yyyy
Simbolo decimal (.) Simbolo de separación de miles (,), Separador de listas
(,), Separador de Fecha (/), Formato de fecha corta (dd/MM/aaaa)

Muchas gracias por sus respuestas .


César Galicia
Soporte Técnico
TNS-México
El conocimiento es un bien que
crece a medida que se comparte"

Preguntas similare

Leer las respuestas

#6 César G.
07/09/2007 - 20:12 | Informe spam
Que tal Héctor Miguel

Siento mucho que la consulta no haya sido totalmente claro desde un incio.

Aclarando un poco el panorama ahora seré más explicito ( eso espero ) ;-P

1. El origen de los datos es un simple archivo de texto.
2. Las operaciones las realizo con VB 6.0 con un codigo parecido al que
sigue

open Ruta & "\Base.txt" for input as #Arch1
open Ruta & "\Fechas.csv" for output as #Arch2

while not eof(Arch1)
line input #Arch1, Linea
Reg = mid$(Linea, Col, 10)

Dia = mid$(Linea, Col, 2)
Mes = mid$(Linea, Col, 2)
Año = mid$(Linea, Col, 2)

Print #Arch2, Reg, & "," & "20" & Año & "/" & Mes & "/" & Dia

Wend
'Aquí escribo en el archivo *.csv y puedo armar la fecha como sea
necesario
es decir, puede ser yyyy/mm/dd o bien, mm/dd/yyyy , dd/mm/yyyy , etc.. o
tomando somo separador el guion medio "-", o sin separador, inclusive .. .

Aquí la consulta es ¿Cuál sería el mejor formato para almacenar esta fecha
en el archivo *.csv para que, al abrirlo en Excel, no tenga ningún problema
y no se alteré el resultado

Ya que, si escribo la fecha dd/mm/yyyy , al abrirlo en excel tengo este
error

30/08/2007
30/08/2007
31/08/2007
31/08/2007
31/08/2007
31/08/2007
31/08/2007
31/08/2007
09/01/2007
09/01/2007
09/01/2007
09/01/2007
09/01/2007

Las primeras son del 31 de Agosto de 2007 y las siguientes son del 01 de
Septiembre de 2007, pero excel las interpreta como 09 de Enero de 2007 .

Muchas gracias

César G.






"Héctor Miguel" escribió en el mensaje
news:
hola, César !

__ 1 __
En realidad la base de datos de texto con la que obtengo los datos esta
en el formato ddmmaa, como lo expuse



1) *como* es que lo exponias antes ?... -> "... si tengo en el archivo de
texto tengo 081607 y 090107 ..."
-> lo anterior se parece mas a "mmddaa" que a "ddmmaa" ;)

__ 2 __
solo que para transferirlo a excel lo que hacia es "componer" un formato
de fecha tal
que al abrirlo en excel lo reconociera por lo que hice lo siguiente
Mes = Mid$(Linea, Col1,2)
Dia = Mid$(Linea, Col1,2)
Año = Mid$(Linea, Col1,2)
Luego Fecha = Dia & "/" Mes & "/20" & Año
Escribia en el archivo de salida p.e.
Print #1, "Registro,Fecha"



2) si estas usando macros para *abrir/leer/...* el archivo csv [y quizas
tambien para *escribir/fabricar/.../lo*] -???-
que es lo que *haces* al usar [aparentemente] la misma instruccion:
Mid$(Linea, Col1, 2) para las 3 variables [dia, mes y a#o] ?

por que no expones la macro [o ambas si tambien lo escribes] ???

__ 3 __
Entonces al abrirlo en excel, las fechas 16/08/2007 no habia ningun
problema pero en Septiembre lo alteraba cuando mencionaba
pero cuando llega al dia 1 de Septiembre lo guarda como 09/01/2007 es
decir sería 09 de Enero 2007





3) *quien* es que pone el dato 'originalmente' en las celdas que se
interpretaran como fechas ?
por que *cambia de parecer* y en ocasiones usa "ddmmaa" y en otras
"mmddaa" -???-

__ 4 __
Ahora la pregunta seria como obtengo el numero de una fecha que tiene el
formato mmddaa ?



4) si como parece, no tienes la *certeza* de que los vas a encontrar
siempre como "ddmmaa"
y seguimos hablando de *evitar conflictos* [por convencionalismos
regionales]...
-> por que no dejarlo en *numero serial* ?

saludos,
hector.

p.d. si revisas las consultas anteriores, veras que aunque van saliendo
datos nuevos, continuan algunas... *discrepancias* :))

Solo para clarificar esta idea que me proporcionas si... en el archivo
de texto tengo
081607 y 090107 los debo dejar asi y luego debo aplicar el formato de
celda = fecha ?



1) [creo que] los datos que expones son diferente de los
ciales -?-

081607 <= OJO: este *numero* NO ES el numero serial de Ago/16/2007
090107 <= OJO: este *numero* NO ES el numero serial de Sep/01/2007
=> y NO son tampoco la forma en que los exponias en tu anterior
consulta: -> 16/08/2007

=> SON una *representacion grafica* [mas bien... *intuitiva*] de un
formato de fecha mmddaa
partiendo de la *base* de que en la representacion: 081607
el ->16<- no podria corresponder a uno de los 12 meses :))

2) el numero serial de las *fechas* anteriores es:
Ago/16/2007 -> 39310
Sep/01/2007 -> 39326

3) cuando aplicas un formato *especifico*... y guardas una hoja de excel
como archivo de texto [csv o el que sea]
al archivo de texto se *transfiere* el contenido de la celda *tal
cual* lo ves en pantalla
=> por eso te sugeria *dejar las fechas* en su numero serial *tal
cual* [SIN formato ni convencionalismos regionales] ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ las consultas anteriores __
... deseo obtener un listado de fechas... en un archivo *.csv (por
comas)
... el inconveniente... las fechas no las respeta con el formato en
el que estan almacenadas
tengo fechas correctas de 16/08/2007 ... pero cuando llega al día 1
de Septiembre lo guarda como 09/01/2007
es decir sería 09 de Enero 2007
Cual seria la mejor forma de guardar/almacenar/ordenar los datos en
el archivo csv
y que no dependa de la configuracion regional o la configuracion de
Excel? [...]







si quieres evitar conflictos en la interpretacion de fechas en
archivos de texto
[independientemente de la configuracion regional de windows, versiones
de excel, y demas *eventalidades*]...

NO apliques ningun formato pre-definido a las celdas de fecha [dejalas
como simples numeros seriales]
el formato que prefieras [o quien lo abra] puede ser aplicado despues
de abierto el archivo de texto ;)










Respuesta Responder a este mensaje
#7 Héctor Miguel
08/09/2007 - 02:29 | Informe spam
hola, César !

[segun comentas]... expones un codigo... *parecido*... al que *realmente* usas -???-

1) *supongo* lo anterior ya que no veo *como*... sin un *avance* de la variable *Col*...
puedas obtener caracteres diferentes de *lo mismo* para tus variables Dia, Mes y Año
Dia = mid$(Linea, Col, 2)
Mes = mid$(Linea, Col, 2)
Año = mid$(Linea, Col, 2)



2) *asumo* que a partir de *cierta* posicion de caracteres leyendo linea a linea tu archivo "\Base.txt"
[representada la posicion por la variable *Col* y pretendiendo intuir que realmente *haces un avance* del tipo Col = Col + 2]

a) existen OCHO caracteres que son la representacion *intuitiva* de una fecha en *formato/orden/...* de -> "ddmmaa" -?-
b) extraes cada dos caracteres y los *conviertes* a un texto-formato de fecha del tipo/orden de "dd/mm/aaaa"
c) quieres *prevenir* conflictos en caso de abrirse "\Fechas.csv" en un pc con fechas en orden diferente de "dd/mm/aaaa"

3) si la intencion es *averiguar* algun formato *estandar/universal/...* donde no importe si "dd/mm/aaaa" o "mm/dd/aaaa" o ?????
y considerando que la *base* [en el archivo "\Base.txt"] sigue siendo la representacion intuitiva de un orden DDMMAA
OJO: asumiendo que tus variables Dia, Mes y Año SI contienen sus valores *respectivos* [es decir]...
-> si rescatas 310807 y ya estableciste el valor de tus variables queda en: -> Dia1, Mes y Año

a) NO quieras *pre-definir* cual pudiera ser un *formato/orden/...* de fechas *universal* [NO existe]
b) *escribe* la fecha con la representacion de su *numero serial* [si recuerdas el segundo mensaje al respecto]...
"... el numero serial de las *fechas* anteriores es: Ago/16/2007 -> 39310 Sep/01/2007 -> 39326 ..."
c) utiliza la funcion DateSerial(Year, Month, Day) *dentro* de una conversion de tipo de datos a CLng(...)
d) *escribe* en el archivo "\Fechas.txt" la linea con la fecha *convertida* a su numero serial *real*
[ejemplo]: en la linea donde escribes cambia:
de: -> Print #Arch2, Reg, & "," & "20" & Año & "/" & Mes & "/" & Dia
a: -> Print #Arch2, Reg, & "," & CLng(DateSerial("20" & Año, Mes, Dia))

4) cuando/donde/... abras el archivo "\Fechas.txt", lo que obtendras sera el numero serial *real* de cada fecha [p.e.]
39234
39235
39236
-> al abrirlo ya podra quien lo abra aplicar el formato/orden/... de fechas segun *su sistema/preferencias/necesidades/...*
con lo que los numeros seriales anteriores seran *convertidos* [mejor dicho... *vistos/maquillados/enmascarados/...*] como:
30/08/2007 o... 08/30/2007
31/08/2007 o... 08/31/2007
01/09/2007 o... 09/01/2007

[que es lo que te he estado *recomendando* desde el principio] :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
Siento mucho que la consulta no haya sido totalmente claro desde un incio.
Aclarando un poco el panorama ahora seré más explicito ( eso espero ) ;-P
1. El origen de los datos es un simple archivo de texto.
2. Las operaciones las realizo con VB 6.0 con un codigo parecido al que sigue

open Ruta & "\Base.txt" for input as #Arch1
open Ruta & "\Fechas.csv" for output as #Arch2
while not eof(Arch1)
line input #Arch1, Linea
Reg = mid$(Linea, Col, 10)
Dia = mid$(Linea, Col, 2)
Mes = mid$(Linea, Col, 2)
Año = mid$(Linea, Col, 2)
Print #Arch2, Reg, & "," & "20" & Año & "/" & Mes & "/" & Dia
Wend
'Aqui escribo en el archivo *.csv y puedo armar la fecha como sea necesario
es decir, puede ser yyyy/mm/dd o bien, mm/dd/yyyy , dd/mm/yyyy , etc.
o tomando somo separador el guion medio "-", o sin separador, inclusive .. .

Aqui la consulta es Cual sería el mejor formato para almacenar esta fecha en el archivo *.csv
para que, al abrirlo en Excel, no tenga ningun problema y no se alteré el resultado
Ya que, si escribo la fecha dd/mm/yyyy , al abrirlo en excel tengo este error

30/08/2007
30/08/2007
31/08/2007
31/08/2007
31/08/2007
31/08/2007
31/08/2007
31/08/2007
09/01/2007
09/01/2007
09/01/2007
09/01/2007
09/01/2007

Las primeras son del 31 de Agosto de 2007 y las siguientes son del 01 de Septiembre de 2007
pero excel las interpreta como 09 de Enero de 2007
Respuesta Responder a este mensaje
#8 César G.
10/09/2007 - 23:58 | Informe spam
Qué tal Héctor Miguel

[segun comentas]... expones un codigo... *parecido*... al que *realmente*
usas -???-



Si, es un extracto del codigo que utilizo

1) *supongo* lo anterior ya que no veo *como*... sin un *avance* de la
variable *Col*...
puedas obtener caracteres diferentes de *lo mismo* para tus variables
Dia, Mes y Año
> Dia = mid$(Linea, Col, 2)
> Mes = mid$(Linea, Col, 2)
> Año = mid$(Linea, Col, 2)



Oh en este fragmento no utilizó una variable, más bien valores como 10,12 y
14 que son los lugares donde se encuentran ubicados los datos

a) existen OCHO caracteres que son la representacion *intuitiva* de una
fecha en *formato/orden/...* de -> "ddmmaa" -?-

En realidad son 6 caracteres, ordenados en el formato mmddaa

b) extraes cada dos caracteres y los *conviertes* a un texto-formato de
fecha del tipo/orden de "dd/mm/aaaa"



Si

c) quieres *prevenir* conflictos en caso de abrirse "\Fechas.csv" en un
pc con fechas en orden diferente de "dd/mm/aaaa"



Si, deseo prevenir conflictos que pueda tener Excel al abrir el archivo
Fechas.csv


3) si la intencion es *averiguar* algun formato *estandar/universal/...*
donde no importe si "dd/mm/aaaa" o "mm/dd/aaaa" o ?????



Exacto, es la intención, yo imaginaba que existía una manera única para
almacenar un valor tal que al abrirlo en Excel no alterara los datos, pero
por lo que me explicas más adelante, esto no es posible.

y considerando que la *base* [en el archivo "\Base.txt"] sigue siendo
la representacion intuitiva de un orden DDMMAA
OJO: asumiendo que tus variables Dia, Mes y Año SI contienen sus
valores *respectivos* [es decir]...
-> si rescatas 310807 y ya estableciste el valor de tus variables queda
en: -> Dia1, Mes y Año

a) NO quieras *pre-definir* cual pudiera ser un *formato/orden/...* de
fechas *universal* [NO existe]



Entendido.

b) *escribe* la fecha con la representacion de su *numero serial* [si
recuerdas el segundo mensaje al respecto]...
"... el numero serial de las *fechas* anteriores es: Ago/16/2007 ->
39310 Sep/01/2007 -> 39326 ..."



Aquí no tenía idea de como obtener el número serial y la función que lo
devolvía .

c) utiliza la funcion DateSerial(Year, Month, Day) *dentro* de una
conversion de tipo de datos a CLng(...)
d) *escribe* en el archivo "\Fechas.txt" la linea con la fecha
*convertida* a su numero serial *real*



Aquí queda resuelta mi duda.

Gracias, por todo.

César G.


"Héctor Miguel" escribió en el mensaje
news:
hola, César !

[segun comentas]... expones un codigo... *parecido*... al que *realmente*
usas -???-

1) *supongo* lo anterior ya que no veo *como*... sin un *avance* de la
variable *Col*...
puedas obtener caracteres diferentes de *lo mismo* para tus variables
Dia, Mes y Año
> Dia = mid$(Linea, Col, 2)
> Mes = mid$(Linea, Col, 2)
> Año = mid$(Linea, Col, 2)

2) *asumo* que a partir de *cierta* posicion de caracteres leyendo linea a
linea tu archivo "\Base.txt"
[representada la posicion por la variable *Col* y pretendiendo intuir
que realmente *haces un avance* del tipo Col = Col + 2]

a) existen OCHO caracteres que son la representacion *intuitiva* de una
fecha en *formato/orden/...* de -> "ddmmaa" -?-
b) extraes cada dos caracteres y los *conviertes* a un texto-formato de
fecha del tipo/orden de "dd/mm/aaaa"
c) quieres *prevenir* conflictos en caso de abrirse "\Fechas.csv" en un
pc con fechas en orden diferente de "dd/mm/aaaa"

3) si la intencion es *averiguar* algun formato *estandar/universal/...*
donde no importe si "dd/mm/aaaa" o "mm/dd/aaaa" o ?????
y considerando que la *base* [en el archivo "\Base.txt"] sigue siendo
la representacion intuitiva de un orden DDMMAA
OJO: asumiendo que tus variables Dia, Mes y Año SI contienen sus
valores *respectivos* [es decir]...
-> si rescatas 310807 y ya estableciste el valor de tus variables queda
en: -> Dia1, Mes y Año

a) NO quieras *pre-definir* cual pudiera ser un *formato/orden/...* de
fechas *universal* [NO existe]
b) *escribe* la fecha con la representacion de su *numero serial* [si
recuerdas el segundo mensaje al respecto]...
"... el numero serial de las *fechas* anteriores es: Ago/16/2007 ->
39310 Sep/01/2007 -> 39326 ..."
c) utiliza la funcion DateSerial(Year, Month, Day) *dentro* de una
conversion de tipo de datos a CLng(...)
d) *escribe* en el archivo "\Fechas.txt" la linea con la fecha
*convertida* a su numero serial *real*
[ejemplo]: en la linea donde escribes cambia:
de: -> Print #Arch2, Reg, & "," & "20" & Año & "/" & Mes & "/" &
Dia
a: -> Print #Arch2, Reg, & "," & CLng(DateSerial("20" & Año, Mes,
Dia))

4) cuando/donde/... abras el archivo "\Fechas.txt", lo que obtendras sera
el numero serial *real* de cada fecha [p.e.]
39234
39235
39236
-> al abrirlo ya podra quien lo abra aplicar el formato/orden/... de
fechas segun *su sistema/preferencias/necesidades/...*
con lo que los numeros seriales anteriores seran *convertidos* [mejor
dicho... *vistos/maquillados/enmascarados/...*] como:
30/08/2007 o... 08/30/2007
31/08/2007 o... 08/31/2007
01/09/2007 o... 09/01/2007

[que es lo que te he estado *recomendando* desde el principio] :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
Siento mucho que la consulta no haya sido totalmente claro desde un
incio.
Aclarando un poco el panorama ahora seré más explicito ( eso espero ) ;-P
1. El origen de los datos es un simple archivo de texto.
2. Las operaciones las realizo con VB 6.0 con un codigo parecido al que
sigue

open Ruta & "\Base.txt" for input as #Arch1
open Ruta & "\Fechas.csv" for output as #Arch2
while not eof(Arch1)
line input #Arch1, Linea
Reg = mid$(Linea, Col, 10)
Dia = mid$(Linea, Col, 2)
Mes = mid$(Linea, Col, 2)
Año = mid$(Linea, Col, 2)
Print #Arch2, Reg, & "," & "20" & Año & "/" & Mes & "/" &
Dia
Wend
'Aqui escribo en el archivo *.csv y puedo armar la fecha como sea
necesario
es decir, puede ser yyyy/mm/dd o bien, mm/dd/yyyy , dd/mm/yyyy , etc.
o tomando somo separador el guion medio "-", o sin separador, inclusive
.. .

Aqui la consulta es Cual sería el mejor formato para almacenar esta fecha
en el archivo *.csv
para que, al abrirlo en Excel, no tenga ningun problema y no se alteré el
resultado
Ya que, si escribo la fecha dd/mm/yyyy , al abrirlo en excel tengo este
error

30/08/2007
30/08/2007
31/08/2007
31/08/2007
31/08/2007
31/08/2007
31/08/2007
31/08/2007
09/01/2007
09/01/2007
09/01/2007
09/01/2007
09/01/2007

Las primeras son del 31 de Agosto de 2007 y las siguientes son del 01 de
Septiembre de 2007
pero excel las interpreta como 09 de Enero de 2007




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida