Conversión de formato de hora militar (hhmm) a formato de hora (hh:mm)<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Necesito convertir la hora militar en el formato hhmm, por ejemplo, 1432 o 725 al formato hh: mm, por ejemplo, 14:32 a 7:25. ¿Existe una fórmula simple que pueda hacer la conversión, o debo usar un script para ello?Gracias.
Re: Conversión de formato de hora militar (hhhh) a formato de hora (hh:mm)¡Funciona! Muchas gracias. ¡Aprendí mucho con solo mirar las fórmulas que propusiste!Re: Conversión de formato de hora militar (hhhh) a formato de hora (hh:mm)Mi primera pregunta es, si la longitud del valor de tiempo de entrada es inferior a 4 caracteres, ¿debería suponerse que faltan ceros (0) en el lado izquierdo del tiempo militar?Si este es el caso, propongo la solución a continuación; Rellena el valor con ceros a la izquierda y luego realiza la conversión.
standard = Substr( "00", Length( Char( :Military ) ) - 1 ) ||
Char( :Military );
Num( Substr( Char( :standard ), -2 ) ) * 60
+Num(
Substr(
Char( :standard ),
1,
(Length( Char( :standard ) ) - 2)
)
) * 3600;
Re: Conversión de formato de hora militar (hhhh) a formato de hora (hh:mm)Intenté usar este código para convertir una cadena en un formato de hora (hh: mm)
Num( Substr( Char( :Militar ), -2 ) ) * 60 + Num(
Substr( Char( :Militar ), 1, (Longitud( Char( :Militar ) ) - 2) )
) * 3600
Sin embargo, me di cuenta de que si la cadena tiene solo 2 dígitos, no se convertirá. Por ejemplo, si es 26, no se convertirá a las 12:26 a. m. Sin embargo, una cadena de 3 dígitos funciona bien (100 se convierte en 1:00 am)
¿Cómo es eso?Re: Conversión de formato de hora militar (hhhh) a formato de hora (hh:mm)Publiqué su código, en la sección de fórmula del nuevo campo, cambié el campo por el nombre de la columna de mi conjunto de datos, ¡y funciona perfectamente!
Num( Substr( Char( :Military ), -2 ) ) * 60 + Num(
Substr( Char( :Military ), 1, (Length( Char( :Military ) ) - 2) )
) * 3600
¡Muchas gracias!
Re: Conversión de formato de hora militar (hhhh) a formato de hora (hh:mm)Hola Jim,
¿Cómo uso este script? ¿Cuáles son las variables que necesitaba cambiar?
Luego, el nombre del conjunto de datos es "transaction_data" y el nombre de la columna que reside en la hora militar es "DAY" (transaction_data:DAY)
Entonces, ¿cómo debo reemplazar estas 2 variables en su script y ejecutar?
Lo siento por una pregunta tan novata.
Re: Conversión de formato de hora militar (hhhh) a formato de hora (hh:mm)¿Qué hay de convertir de Military Time a regular?
Re: Conversión de formato de hora militar (hhhh) a formato de hora (hh:mm)Otro enfoque más que evita las cadenas por completo:
dt << New Column( "time",
Numeric,
"Continuous",
Format( "hr:m", 12 ),
Formula( Floor( :Military / 100 ) * 3600 + Mod( :Military, 100 ) * 60 )
);
Re: Conversión de formato de hora militar (hhmm) a formato de hora (hh:mm)Jim, tu solución funcionó perfectamente. Me gusta cómo todo se mantuvo en la forma numérica. ¡Muchas gracias!
Re: Conversión de formato de hora militar (hhmm) a formato de hora (hh:mm)Byron, muchas gracias por tu orientación.Su método propuesto funciona; sin embargo, mantiene la variable en estado de carácter.
¡He guardado tu guión para futuros casos especiales!
Re: Conversión de formato de hora militar (hhhh) a formato de hora (hh:mm)Aquí hay una forma diferente de hacer lo mismo que muestra Bryon.Mi versión va directamente a un valor de tiempo numérico, en lugar de crear un valor de carácter que luego se ingresa.
Nombres predeterminados hasta aquí ( 1 ) ;
// Crea una tabla de datos de muestra con algunos tiempos militares .....
// La columna puede ser numérica o de caracteres... la conversión
// fórmula maneja ambos
dt = Nueva tabla ( "Sin título 3" , Agregar filas ( 2 ) , Nueva columna ( "Militar" , Numérico , "Continuo" , Formato ( "Mejor" , 12 ) , Establecer valores ( [ 1421 , 923 ] ) ) ) ;
// Las funciones de espera () están ahí para agregar un efecto dramático 
Esperar ( 2 ) ;
// Agrega una nueva columna para contener los tiempos convertidos
// Usa un formato de tiempo ya que la conversión creará
// un valor que es el número de segundos desde la medianoche
dt << Nueva columna ( "tiempo" , Numérico , "Continuo" , Formato ( "h:m" , 12 ) ) ;
Esperar ( 2 ) ;
// Corre por todas las filas y haz la conversión
// La fórmula funcionará como una fórmula de columna simplemente eliminando
// el ":tiempo="
Por cada fila (
: tiempo = número ( Sust. ( Carbonizarse ( : Militar ) , - 2 ) ) * 60 +
número ( Sust. ( Carbonizarse ( : Militar ) , 1 , ( Longitud ( Carbonizarse ( : Militar ) ) - 2 ) ) ) * 3600
) ;
Re: Conversión de formato de hora militar (hhhh) a formato de hora (hh:mm)Es probable que haya una forma más sencilla de hacer esto; sin embargo, esto funciona bastante bien.
Paso 1
Repetir( "0", 4 - Longitud( Char( :Inicio ) ) ) || Char( :Iniciar )
Convierte el número inicial en un carácter de 4 dígitos rellenado con ceros (esto también es útil para los códigos postales)
Paso 2
Izquierda( :Paso 1, 2 ) || ":" || Derecha (: Paso 1, 2)
Inserta dos puntos entre las horas y los minutos
Paso 3
Formato( Informat( :Char 24 hr Time, "h:m" ), "h:m" )
Esta fórmula toma el carácter de 24 horas y lo convierte en el número de segundos después de la medianoche, luego convierte los segundos en 12 horas.
Informat evalúa una cadena de caracteres y devuelve un número
format evalúa una cadena numérica y devuelve un carácter
| Comenzar |
Paso 1 |
Paso 2 |
Paso 3 |
| 3 |
0003 |
00:03 |
00:03 |
| 30 |
0030 |
00:30 |
00:30 |
| 1130 |
1130 |
11:30 |
11:30 AM |
| 1830 |
1830 |
18:30 |
6:30 PM |
........
o podría hacerlo todo en un paso "simple" con una fórmula
Format(
Informat(
Left( Repeat( "0", 4 - Length( Char( :Start ) ) ) || Char( :Start ), 2 ) || ":" ||
Right( Repeat( "0", 4 - Length( Char( :Start ) ) ) || Char( :Start ), 2 ),
"h:m"
),
"h:m"
);
Guardo una colección de fórmulas feroces que se reciclan para casos especiales.