Conversione del formato dell'ora militare (hhmm) nel formato dell'ora (hh:mm)<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Devo convertire l'ora militare nel formato hhmm, ad esempio 1432 o 725 in formato hh:mm, ad esempio dalle 14:32 alle 7:25. Esiste una formula semplice che può effettuare la conversione o dovrei usare uno script per questo?Grazie.
Oggetto: Conversione del formato dell'ora militare (hhhh) nel formato dell'ora (hh:mm)Funziona! Grazie mille. Ho imparato tanto solo guardando le formule che hai proposto!Oggetto: Conversione del formato dell'ora militare (hhhh) nel formato dell'ora (hh:mm)La mia prima domanda è, se la lunghezza del valore dell'ora di input è inferiore a 4 caratteri, si dovrebbe presumere che manchino zeri (0) dal lato sinistro dell'ora militare?Se questo è il caso, propongo la soluzione di seguito; Riempie il valore con zeri iniziali e quindi esegue la conversione.
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;
Oggetto: Conversione del formato dell'ora militare (hhhh) nel formato dell'ora (hh:mm)Ho tentato di utilizzare questo codice per convertire una stringa in un formato orario (hh:mm)
Num( Substr( Char( :Militare ), -2 ) ) * 60 + Num(
Substr( Char( :Military ), 1, (Lunghezza( Char( :Military ) ) - 2) )
) * 3600
Tuttavia, mi sono reso conto che se la stringa è composta solo da 2 cifre, non verrà convertita. Ad esempio, se è 26, non verrà convertito in 00:26. Tuttavia, una stringa di 3 cifre funziona bene (100 diventa 1:00)
Com'è possibile?Oggetto: Conversione del formato dell'ora militare (hhhh) nel formato dell'ora (hh:mm)Ho pubblicato il tuo codice, nella sezione formula del nuovo campo, ho cambiato il campo con il nome della colonna del mio set di dati e funziona perfettamente!
Num( Substr( Char( :Military ), -2 ) ) * 60 + Num(
Substr( Char( :Military ), 1, (Length( Char( :Military ) ) - 2) )
) * 3600
Grazie mille!
Oggetto: Conversione del formato dell'ora militare (hhhh) nel formato dell'ora (hh:mm)Ciao Jim,
Come uso questo script? Quali sono le variabili che dovevo cambiare?
Quindi il nome del set di dati è "transaction_data" e il nome della colonna che risiede l'ora militare è "DAY" (transaction_data:DAY)
Quindi, come dovrei sostituire queste 2 variabili nel tuo script ed eseguirle?
Scusa per una domanda così da niubbo.
Oggetto: Conversione del formato dell'ora militare (hhhh) nel formato dell'ora (hh:mm)Che ne dici di convertire dal tempo militare al normale?
Oggetto: Conversione del formato dell'ora militare (hhhh) nel formato dell'ora (hh:mm)Ancora un altro approccio che evita del tutto le stringhe:
dt << New Column( "time",
Numeric,
"Continuous",
Format( "hr:m", 12 ),
Formula( Floor( :Military / 100 ) * 3600 + Mod( :Military, 100 ) * 60 )
);
Oggetto: Conversione del formato dell'ora militare (hhmm) nel formato dell'ora (hh:mm)Jim, la tua soluzione ha funzionato perfettamente. Mi piace come tutto sia rimasto nella forma numerica. Grazie mille!
Oggetto: Conversione del formato dell'ora militare (hhmm) nel formato dell'ora (hh:mm)Byron, grazie mille per la tua guida.Il tuo metodo proposto funziona; tuttavia, mantiene la variabile nello stato carattere.
Ho salvato il tuo script per futuri casi speciali!
Oggetto: Conversione del formato dell'ora militare (hhhh) nel formato dell'ora (hh:mm)Ecco un modo diverso di fare la stessa cosa che Bryon sta mostrando.La mia versione va direttamente a un valore temporale numerico, piuttosto che creare un valore di carattere che viene quindi inserito.
I nomi predefiniti sono qui ( 1 ) ;
// Crea una tabella di dati di esempio con alcuni tempi militari.....
// La colonna può essere numerica o carattere... la conversione
// la formula gestisce entrambi
dt = Nuova Tavola ( "Senza titolo 3" , Aggiungi righe ( 2 ) , Nuova Colonna ( "Militare" , Numerico , "Continuo" , Formato ( "Migliore" , 12 ) , Imposta valori ( [ 1421 , 923 ] ) ) ) ;
// Le funzioni wait() sono lì solo per aggiungere un effetto drammatico 
Aspettare ( 2 ) ;
// Aggiungi una nuova colonna per contenere i tempi convertiti
// Usa un formato ora poiché la conversione creerà
// un valore che è il numero di secondi dalla mezzanotte
dt << Nuova Colonna ( "tempo" , Numerico , "Continuo" , Formato ( "ore:m" , 12 ) ) ;
Aspettare ( 2 ) ;
// Corri su tutte le righe ed esegui la conversione
// La formula funzionerà come una formula di colonna semplicemente rimuovendo
// il ":time="
Per ogni riga (
: tempo = Num ( Sost ( Car ( : Militare ) , - 2 ) ) * 60 +
Num ( Sost ( Car ( : Militare ) , 1 , ( Lunghezza ( Car ( : Militare ) ) - 2 ) ) ) * 3600
) ;
Oggetto: Conversione del formato dell'ora militare (hhhh) nel formato dell'ora (hh:mm)Probabilmente c'è un modo più semplice per farlo; tuttavia, questo funziona abbastanza bene.
Passo 1
Ripeti( "0", 4 - Lunghezza( Char( :Start ) ) ) || Car( :Inizio )
Trasforma il numero iniziale in un carattere a 4 cifre riempito di zeri (questo è utile anche per i codici postali)
Passo 2
Sinistra( :Passo 1, 2 ) || ":" || Destra( :Passo 1, 2 )
Inserisce i due punti tra le ore ei minuti
Passaggio 3
Format( Informat( :Char 24 hr Time, "h:m" ), "h:m" )
Questa formula prende il carattere 24 ore e lo trasforma nel numero di secondi dopo la mezzanotte, quindi trasforma i secondi in 12 ore.
Informat valuta una stringa di caratteri e restituisce un numero
format valuta una stringa numerica e restituisce un carattere
| Inizio |
Passo 1 |
Passo 2 |
Passaggio 3 |
| 3 |
0003 |
00:03 |
00:03 |
| 30 |
0030 |
00:30 |
12:30 |
| 1130 |
1130 |
11:30 |
11:30 |
| 1830 |
1830 |
18:30 |
18:30 |
........
oppure potresti fare tutto in un "semplice" passaggio con una formula
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"
);
Conservo una collezione di formule feroci che vengono riciclate per casi speciali.