HMSfromFloatAMPM

From the Oblivion ConstructionSet Wiki
Jump to navigation Jump to search

A User Function for use with Oblivion Script Extender


Syntax:

(hh:mm:ss AM/PMstring) HMSfromFloatAMPM  Valuefloat

Converts a value into a "hh:mm:ss AM/PM" formatted string.

Value is supposed to contain the hour + decimals, like the value returned by GameHour.


Notes[edit | edit source]

  • Value is normalized to 0-24 (e.g.: value 30,5 returns "06:30:00 AM", value -1 returns "11:00:00 PM").


Examples:[edit | edit source]

Call HMSfromFloatAMPM 10,5         ; returns "10:30:00 AM"
Call HMSfromFloatAMPM 17.25        ; returns "05:15:00 PM"
Call HMSfromFloatAMPM GameHour     ; returns the formatted game time


Code[edit | edit source]

scn HMSfromFloatAMPM  
;---------------------------------------------------------------------
;   Converts an hour value into a formated string
;===================================
;  Input: a float containing the hour and decimals like the one returned by GameHour
;  Returns: a string formatted as "hh:mm:ss AM/PM"
;
;  Usage: Call HMSampmFromFloat GameHour
;---------------------------------------------------------------------
string_var sTime
string_var sAMPM
float value
float vtime
short ihour
short imin 
short isec
short i

begin Function {value} 

  ;=== Normalize to 0-24 ===
  let i := value / 24
  let vtime := value - i * 24
  if vtime < 0
    let vtime := vtime + 24
  endif

  ;=== Format the Hour ===
  set ihour to vtime
  set vtime to vtime - ihour
  ;=== conver to AM-PM ===
  if ihour < 12
    let sAMPM := " AM"
  else
    let sAMPM := " PM"
  endif
  let ihour := ihour % 12

  if ihour == 0
    let sTime := "12:"
  elseif ihour < 10
    let sTime := "0" + $ihour + ":"
  else
    let sTime := $ihour + ":"
  endif

  ;=== Format Minutes ===
  set vtime to vtime * .6 * 100
  set imin to vtime 
  if imin < 10
    let sTime := sTime + "0" + $imin + ":" 
  else
    let sTime := sTime + $imin + ":" 
  endif

  ;=== Format Seconds ===
  set vtime to vtime - imin 
  set vtime to vtime * .6 * 100
  set isec to vtime 
  if vtime < 10
    let sTime := sTime + "0" + $isec 
  else
    let sTime := sTime + $isec 
  endif

  SetFunctionValue  sTime + sAMPM

end

See Also[edit | edit source]