PDA

Ver la Versión Completa : Cambiar formato 12 Hr's a 24 Hr's


lina maria
21-05-2008, 15:50:05
Hola amigos como estan quisiera pedir su colaboracion para ke me ayuden a solucionar un ploblema ke se me genera al hacer una aplicacion en delhi, tengo un maskedit en donde el usuario digita una hora cualkiera y selecciona si esta es am o pm, si es am la almaceno en la bd tal como esta pero si es pm tomo esta hora y le sumo 1/2 (12/24) para ke me la ponga en formato pm, el problema surge cuando kiero guardar esta hora en un pc ke tiene como formato 12 Hr's me la guarda agregandole pm a la hora ejemplo si kiero almacenar 3 de la tarde me la guarda como 3:00 pm y no como 15:00 ke es la forma como la tendria ke almacenar en la bd, les agradesco si alguno sabe alguna funcion o alguna forma de convertir esa hora a formato 24 Hr's, muchas gracias y ojala me puedan ayudar ;)

xEsk
21-05-2008, 16:01:34
Hola, a ver si esto te lo soluciona:

var
Fecha: TDateTime;
Resultado: String;

begin
// hora a convertir
Fecha:=StrToTime('03:00:00 pm');
// convertir hora a string
DateTimeToString(Resultado, 'hh:mm:ss', Fecha);

Lo que hace este ejemplo, es obligarle a formatear la hora en formato de 24h. Si no quieres mostrar los segundos, simplemente quitale ":ss" y ya esta... :)

Te enlazo este link (http://www.delphibasics.co.uk/RTL.asp?Name=DateTimeToString) donde hay mas información.

Saludos.

paladincubano
21-05-2008, 16:34:18
Yo creo que debias utilizar la variable del sistema ShortTimeFormat para que en toda la aplicacion cuando trabajes con fechas uses es que tu definas.
Ponla en el evento onCreate de tu forma principal.


ShortTimeFormat := 'h:nn:ss';
LongTimeFormat := 'h:nn:ss';


(ahora mismo no estoy seguro, creo qye es el formato de 24h, lo puedes ver en la ayuda), cualquier cosa avisas si tienes dudas.
Saludos y espero haberte resuelto el problema.

lina maria
21-05-2008, 16:43:16
oye muchisisisisimas gracias me funciono a la perfeccion te kedo muy agradecida ;)

paladincubano
21-05-2008, 17:18:39
Cual fue el que te sirvio de las dos respuestas?
Yo he editado la mia unas cuantas veces porque lo hice a memoria y no recordaba mucho, pero ya la final es la que esta echa.
Mira.
El primer ejemplo que te pusieron esta muy bien, pero es para solo en un caso especifico. El que te pongo yo, es para cualquier tipo de hora encontrada en tu aplicacion, desde los mismos TDatetime hasta las mascaras de fecha.
Dependiendo de lo que tu quieras hacer escoge cualquiera.
En mi caso, como siempre uso un formato de fecha y hora estandar para todo, pues lo hago con la variable esa del sistema que te he puesto y asi me evito programar TODO cada vez que quiera convertir fechas u horas.
Espero te ayude.

PD: Se aplica tambien para el caso de las fechas con la variable ShortDateFormat.
Especial atencion a "h:nn:ss" es asi, con "n" para especificar los minutos, ya que la "m", es para definir formato de mes.
Una sola "n" al igual que una sola "h" te define como un numero
ejemplo: 8:06AM = "h:n" = 8:6
"h:nn"= 8:06
"hh:nn"= 08:06

xEsk
22-05-2008, 00:05:58
Cual fue el que te sirvio de las dos respuestas?
Yo he editado la mia unas cuantas veces porque lo hice a memoria y no recordaba mucho, pero ya la final es la que esta echa.
Mira.
El primer ejemplo que te pusieron esta muy bien, pero es para solo en un caso especifico. El que te pongo yo, es para cualquier tipo de hora encontrada en tu aplicacion, desde los mismos TDatetime hasta las mascaras de fecha.
Dependiendo de lo que tu quieras hacer escoge cualquiera.
En mi caso, como siempre uso un formato de fecha y hora estandar para todo, pues lo hago con la variable esa del sistema que te he puesto y asi me evito programar TODO cada vez que quiera convertir fechas u horas.
Espero te ayude.

PD: Se aplica tambien para el caso de las fechas con la variable ShortDateFormat.
Especial atencion a "h:nn:ss" es asi, con "n" para especificar los minutos, ya que la "m", es para definir formato de mes.
Una sola "n" al igual que una sola "h" te define como un numero
ejemplo: 8:06AM = "h:n" = 8:6
"h:nn"= 8:06
"hh:nn"= 08:06

Esto de cambiar las configuraciones del usuario (aun que sea local) no es recomendable, me refiero a que si el usuario lo tiene configurado para ver las fechas en formato de 12 horas no puedes ir tu y cambiárselo porque a ti te viene bien para guardar en la BD (proceso interno en tu programa). Es mejor controlar tu el "cómo" se guarda que no cambiárselo al usuario.

Saludos.

paladincubano
22-05-2008, 09:33:05
Claro man, yo entiendo lo que tu dices, por eso te digo que depende de la aplicacion que estes desarrollando, en mi caso, las fechas para los clientes son transparentes y nunca interactuan con ella. Solo la controlo yo para manejar la caducidad y demas cosas en la BD. Pero nunca interactuan con ella. POr eso te digo que en mi caso me conviene mas la variable porque no tengo que estar formateando ni conviertiendo formatos.
Gracias por la aclaracion.
Saludos.

xEsk
22-05-2008, 12:27:10
Claro man, yo entiendo lo que tu dices, por eso te digo que depende de la aplicacion que estes desarrollando, en mi caso, las fechas para los clientes son transparentes y nunca interactuan con ella. Solo la controlo yo para manejar la caducidad y demas cosas en la BD. Pero nunca interactuan con ella. POr eso te digo que en mi caso me conviene mas la variable porque no tengo que estar formateando ni conviertiendo formatos.
Gracias por la aclaracion.
Saludos.

Todo claro :)

Saludos.

lina maria
28-05-2008, 22:25:17
hola compañeros asi fue ke resolvi el problema con:
DateTimeToString(Resultado, 'hh:mm:ss', Fecha);en resultado guardo la hora del sistema y la paso a formato 24 hr's, y ya con eso la comparo con las horas ke ingresa el usuario y las ke estan almacenadas en la bd, ya ke yo todo el codigo y lo ke esta en la bd lo manejo en formato 24 hr's asi no tengo inconveniente y es totalmente transparente para el usuario, muchas gracias por la colaboracion prestada y les debo una cerveza, cuando me gradue y trabaje se las pagare ;), chao y de nuevo gracias

waly2k1
01-06-2008, 09:25:34
usa un datetimepicker para la hora
y FormatDateTime( horacapturada, 'HH:mm:ss'); // HH mayusculas es el formato 24:00 y nunca cambies la configuracion de un usuario, porque si por una aplicacion sencilla o no, deja de funcionar otros sistemas mas importantes mamma mia!!!

Saludos

xEsk
03-06-2008, 11:37:07
usa un datetimepicker para la hora
y FormatDateTime( horacapturada, 'HH:mm:ss'); // HH mayusculas es el formato 24:00 y nunca cambies la configuracion de un usuario, porque si por una aplicacion sencilla o no, deja de funcionar otros sistemas mas importantes mamma mia!!!

Saludos

Eso ya se comentó mas arriba xD

Saludos

paladincubano
03-06-2008, 12:56:17
usa un datetimepicker para la hora
y FormatDateTime( horacapturada, 'HH:mm:ss'); // HH mayusculas es el formato 24:00 y nunca cambies la configuracion de un usuario, porque si por una aplicacion sencilla o no, deja de funcionar otros sistemas mas importantes mamma mia!!!

Saludos


Vamos a ver señores, cuando propuse la variable LongTimeFormat, esa variable SOLO AFECTA a la aplicacion tuya mientras este corriendo, NO TIENE NADA QUE VER con los parametros en el windows de formato de hora y por ende NO AFECTA a ninguna aplicacion aparte de la tuya. Y yo siempre recomiendo usarla, siempre que tu aplicacion no requiera de entradas de fecha por parte de los clientes ya que lo lian y lo obligan a usar un formato fijo. Usela siempre cuando su aplicacion no lo requiera respecto a interaccion con el cliente y cuando tenga que usted trabajar con muchas fechas para que no este formateando cada vez que la use.
Me entiendo??
saludos.

adfa
03-06-2008, 13:30:25
Paladincubano tiene razón.
Además no hay que confundir como se muestran las fechas a como se graban, internamente el Tdatetime es un numero decimal cuya parte entera es el año,mes,día y la parte decimal las horas,minutos,segundo.
Si en la base de datos se almacena un datetime es un datetime, como se lo muestres al usuario es una cosa diferente, si aceptas el dato en datetimepicker que maneja el tdatetime comparas con ese formato y listo, en el display del componente o en los mensajes lo puedes mostrar como quieras.
Saludos