https://foro.gambas-es.org/viewtopic.php?f=1&t=7651
-----------------------------------
gambafeliz
Sabado, 24 Agosto 2019, 21:56

¿Como Formateo La Siguiente Fecha?
-----------------------------------
Hola,

Tengo estas fechas:

"8/2/19 10:00" = "d/m/yy hh:mm"
"8/12/19"         = "d/m/yy"

Yo necesito hacer: "yyyy/mm/dd hh:mm"

"2019/02/08 10:00"
"2019/12/08 00:00"

Como lo puedo hacer por código, que funciones o conversiones dispongo en Gambas más apropiadamente. 

Nota: Son cadenas de texto.

¿Quizás modifico todo según cadenas de texto y aplico reglas para rellenar los ceros?

Gracias por adelantado.


-----------------------------------
tincho
Sabado, 24 Agosto 2019, 22:00

Re: ¿Como Formateo La Siguiente Fecha?
-----------------------------------
Podes usar la función split en combinación con Format
Saludos.


-----------------------------------
gambafeliz
Sabado, 24 Agosto 2019, 22:05

Re: ¿Como Formateo La Siguiente Fecha?
-----------------------------------
[quote user="tincho" post="45824"]Podes usar la función split en combinación con Format
Saludos.[/quote]

Me gusta tu idea tincho, Gracias eres un Sol :)

Ahora falta que me funcione para todos los casos.

Saludos.


-----------------------------------
shordi
Sabado, 24 Agosto 2019, 22:08

Re: ¿Como Formateo La Siguiente Fecha?
-----------------------------------
[code linenumbers=false syntax=gambas] 
 
dim str1,str2 as string

str1 = Format(Val("8/2/19 10:00"), "yyyy/mm/dd hh:nn")

str2 = Format(Val("8/2/19"), "yyyy/mm/dd hh:nn")

end[/code]


-----------------------------------
gambafeliz
Sabado, 24 Agosto 2019, 22:11

Re: ¿Como Formateo La Siguiente Fecha?
-----------------------------------
[quote user="shordi" post="45827"][code linenumbers=false syntax=gambas] 
 
dim str1,str2 as string

str1 = Format(Val("8/2/19 10:00"), "yyyy/mm/dd hh:nn")

str2 = Format(Val("8/2/19"), "yyyy/mm/dd hh:nn")

end[/code][/quote]

¿Sabes?, yo probé str1 = Format("8/2/19 10:00", "yyyy/mm/dd hh:mm")

Y me cascaba, pero seguro que es por que estaba mal, como veo en tu ejemplo. 

Muchísimas gracias lo prueba y si pita bien ya te cuento.  :mrorange:


-----------------------------------
Shell
Domingo, 25 Agosto 2019, 08:36

Re: ¿Como Formateo La Siguiente Fecha?
-----------------------------------
GambaFeliz:

[quote]
¿Sabes?, yo probé str1 = Format("8/2/19 10:00", "yyyy/mm/dd hh:mm")
[/quote]

Efectivamente. Lo mismo que estaba intentando hacer. No creía en principio que fuera necesario "Val".
Se me hacía raro que Format no entendiese el solo la cadena sin una conversión.

El error que da es:

[quote]
Type mismatch: wanted Float, got String instead
[/quote]

Las conversiones.  :twisted: 

La ayuda dice que Format puede:

[quote]
La función puede dar formato a días, tiempo, números, y monedas.
[/quote]

Pero no dice que a cadenas. Esta especificando los tipos arriba.

Entonces Val convierte esa cadena a una fecha. Probablemente Val lo convierta primero al formato mes-día-año y 
luego se formatea al formato de fecha que queremos.

Mi fallo es que usando la función Now ya tengo la fecha actual y luego con format la formateaba como me gustaba a mi.
Now lógicamente da una fecha no es una cadena. Así que por eso se debe usar Val cuando queremos convertir de cadena a fecha.

Saludos


-----------------------------------
gambafeliz
Domingo, 25 Agosto 2019, 09:09

Re: ¿Como Formateo La Siguiente Fecha?
-----------------------------------
[quote user="Shell" post="45831"]GambaFeliz:

[quote]
¿Sabes?, yo probé str1 = Format("8/2/19 10:00", "yyyy/mm/dd hh:mm")
[/quote]

Efectivamente. Lo mismo que estaba intentando hacer. No creía en principio que fuera necesario "Val".
Se me hacía raro que Format no entendiese el solo la cadena sin una conversión.

El error que da es:

[quote]
Type mismatch: wanted Float, got String instead
[/quote]

Las conversiones.  :twisted: 

La ayuda dice que Format puede:

[quote]
La función puede dar formato a días, tiempo, números, y monedas.
[/quote]

Pero no dice que a cadenas. Esta especificando los tipos arriba.

Entonces Val convierte esa cadena a una fecha. Probablemente Val lo convierta primero al formato mes-día-año y 
luego se formatea al formato de fecha que queremos.

Mi fallo es que usando la función Now ya tengo la fecha actual y luego con format la formateaba como me gustaba a mi.
Now lógicamente da una fecha no es una cadena. Así que por eso se debe usar Val cuando queremos convertir de cadena a fecha.

Saludos[/quote]

Me gusta, joven, tu detallada explicación. Esta claro que shordi a dado la solución mejor para todos. tincho en mi particular dio la solución enrebezada propia para gente como yo y él mismo. Pero tu has dado la explicación más apropiada para terminar este hilo. 

Por lo tanto creo que cuando un novato entre por este hilo lo tendrá muy claro con estas lineas de explicación.

Gracias, Shell y a todos.


-----------------------------------
shordi
Domingo, 25 Agosto 2019, 09:54

Re: ¿Como Formateo La Siguiente Fecha?
-----------------------------------
[quote]. Probablemente Val lo convierta primero al formato mes-día-año y
luego se formatea al formato de fecha que queremos.
[/quote]
No exactamente. Tenéis que tener en cuenta que las fechas son números y no tienen formato [i]per se[/i]. Para verlas hay que convertirlas pero... ¿Qué fecha queremos ver, la que figura en la base de datos o nuestra fecha local equivalente?¿y qué fecha queremos grabar en la base de datos, la nuestra local o la fecha del servidor? Es decir, hay fechas absolutas (que sería directamente la que hay en la BD, sin más) y fechas relativas (que serían la traducción de esa fecha a nuestro horario local).
Si quiero saber a qué hora se subió un post a una Base de Datos y me dice que a las tres de la mañana ¿son las tres de la mañana mías o las de venezuela, por ejemplo, país del autor del post?
Gambas contempla ambas posibilidades y nos facilita la labor... pero hay que entenderlo

Considedad éste código:
[code linenumbers=false syntax=gambas]
f = Val("18/2/19 00:00") 'devuelve 18/02/2019 00:00:00 como fecha
Str=str(f) 'devuelve "18/02/2019 00:00:00" Es decir, f convertida a cadena
Str=CStr(f) 'devuelve "02/17/2019 22:00:00" es decir: Hora UTC - localización (UTC+2=horario de verano en España. Al restar las dos horas, cambiamos de día)
f2 = CDate("2/18/19 00:00") 'devuelve 18/02/2019 02:00:00. Es decir: Hora UTC + localización.
[/code]

Resumiendo: 
Val y Str son inversas y manejan horas absolutas.
Cdate y Cstr son inversas y aplican los parámetros de Localización al valor recibido.

Saludos


-----------------------------------
gambafeliz
Domingo, 25 Agosto 2019, 10:05

Re: ¿Como Formateo La Siguiente Fecha?
-----------------------------------
[quote user="shordi" post="45835"][quote]. Probablemente Val lo convierta primero al formato mes-día-año y
luego se formatea al formato de fecha que queremos.
[/quote]
No exactamente. Tenéis que tener en cuenta que las fechas son números y no tienen formato [i]per se[/i]. Para verlas hay que convertirlas pero... ¿Qué fecha queremos ver, la que figura en la base de datos o nuestra fecha local equivalente?¿y qué fecha queremos grabar en la base de datos, la nuestra local o la fecha del servidor? Es decir, hay fechas absolutas (que sería directamente la que hay en la BD, sin más) y fechas relativas (que serían la traducción de esa fecha a nuestro horario local).
Si quiero saber a qué hora se subió un post a una Base de Datos y me dice que a las tres de la mañana ¿son las tres de la mañana mías o las de venezuela, por ejemplo, país del autor del post?
Gambas contempla ambas posibilidades y nos facilita la labor... pero hay que entenderlo

Considedad éste código:
[code linenumbers=false syntax=gambas]
f = Val("18/2/19 00:00") 'devuelve 18/02/2019 00:00:00 como fecha
Str=str(f) 'devuelve "18/02/2019 00:00:00" Es decir, f convertida a cadena
Str=CStr(f) 'devuelve "02/17/2019 22:00:00" es decir: Hora UTC - localización (UTC+2=horario de verano en España. Al restar las dos horas, cambiamos de día)
f2 = CDate("2/18/19 00:00") 'devuelve 18/02/2019 02:00:00. Es decir: Hora UTC + localización.
[/code]

Resumiendo: 
Val y Str son inversas y manejan horas absolutas.
Cdate y Cstr son inversas y aplican los parámetros de Localización al valor recibido.

Saludos[/quote]

Polemico !!!!  Polemico !!!! Polemico !!!! :twisted:  :twisted: 

 :lol:  :lol:  :mryellow: 

Simplemente me encantó tu explicación. Magnific, si Sr. 

Ahora el hilo esta feten.

Gracias :)

Nota: Perdón por mi lamentable inicio previo.  :mrorange:


-----------------------------------
Shell
Lunes, 26 Agosto 2019, 08:35

Re: ¿Como Formateo La Siguiente Fecha?
-----------------------------------
[b]Shordi[/b]:

Interesante el tema de las fechas. Tengo que preparar una pregunta. Pero me gustaría volver a repasar bien
tu respuesta para comprender mejor esos cambios de fecha. Dichoso agosto. Y me estoy viendo septiembre igual.. :( 

En "estas fechas".. :-D vuelve mucha gente al curro.  :twisted: 

Saludos


