Parse Time String
aclight
3:20:05 AM
3:45:00 PM
13:15:44
If you have a date-time string and wish to parse it into seconds, use the Parse Date,Time and Date/Time Strings snippet.
To represent midnight (the beginning of a day), use
00:00:00
or 12:00:00 AM
. Using 24:00:00
to represent midnight will not produce any kind of error, however the function will return 86400 seconds, which is probably not the result you expect.//**
// Convert a formatted time string into a number
// of seconds. The function returns -1 if there
// was an error.
//*
Function Time2Secs(timeString)
String timeString
// NOTE: timeString is assumed to be a colon-separated
// string as hours:minutes:seconds PM where
// the PM may also be AM or may be omitted.
// Leading zeros are allowed but not required for each
// of the three digit groups.
// The space between the seconds digits and the
// AM or PM is optional. If neither AM nor PM is
// found, the time will be assumed to already be in
// 24-hour format. The case of AM and PM does not matter.
// The range of the digits is not checked.
Variable hours, minutes, seconds
String ampmStr = ""
sscanf timeString, "%u:%u:%u%s", hours, minutes, seconds, ampmStr
if (V_flag < 3)
print "Error in Time2Secs: could not successfully parse the time."
return -1
elseif (V_flag == 4)
// Determine whether AM or PM or something bogus
// was used.
if (cmpstr(" ", ampmStr[0]) == 0)
// Get rid of the leading space.
ampmStr = ampmStr[1, strlen(ampmStr) - 1]
endif
// Test that ampmStr is now either "AM" or "PM"
// (case insensitive). If not, then it's a bogus string.
ampmStr = UpperStr(ampmStr)
StrSwitch (ampmStr)
Case "AM":
// Compensate for the fact that, eg., 12:30:30 AM is
// only 30 minutes and 30 seconds past midnight (the
// beginning of the day), and not 12 hours 30 minutes
// and 30 seconds.
if (hours == 12)
hours -= 12
endif
break
Case "PM":
// Compensate for the fact that, eg., 12:30:30 PM is
// only 30 minutes and 30 seconds past noon, which
// is 12 hours past midnight (the beginning of the day),
// and not 24 hours 30 minutes and 30 seconds.
if (hours == 12)
// Don't need to do anything.
else
hours += 12
endif
break
default:
// It's bogus, report error to user.
print "Error in Time2Secs: Could not parse AM/PM string."
return -1
EndSwitch
endif
// Do the conversion into seconds.
seconds += (minutes * 60) + (hours * 60 * 60)
return seconds
End
// Convert a formatted time string into a number
// of seconds. The function returns -1 if there
// was an error.
//*
Function Time2Secs(timeString)
String timeString
// NOTE: timeString is assumed to be a colon-separated
// string as hours:minutes:seconds PM where
// the PM may also be AM or may be omitted.
// Leading zeros are allowed but not required for each
// of the three digit groups.
// The space between the seconds digits and the
// AM or PM is optional. If neither AM nor PM is
// found, the time will be assumed to already be in
// 24-hour format. The case of AM and PM does not matter.
// The range of the digits is not checked.
Variable hours, minutes, seconds
String ampmStr = ""
sscanf timeString, "%u:%u:%u%s", hours, minutes, seconds, ampmStr
if (V_flag < 3)
print "Error in Time2Secs: could not successfully parse the time."
return -1
elseif (V_flag == 4)
// Determine whether AM or PM or something bogus
// was used.
if (cmpstr(" ", ampmStr[0]) == 0)
// Get rid of the leading space.
ampmStr = ampmStr[1, strlen(ampmStr) - 1]
endif
// Test that ampmStr is now either "AM" or "PM"
// (case insensitive). If not, then it's a bogus string.
ampmStr = UpperStr(ampmStr)
StrSwitch (ampmStr)
Case "AM":
// Compensate for the fact that, eg., 12:30:30 AM is
// only 30 minutes and 30 seconds past midnight (the
// beginning of the day), and not 12 hours 30 minutes
// and 30 seconds.
if (hours == 12)
hours -= 12
endif
break
Case "PM":
// Compensate for the fact that, eg., 12:30:30 PM is
// only 30 minutes and 30 seconds past noon, which
// is 12 hours past midnight (the beginning of the day),
// and not 24 hours 30 minutes and 30 seconds.
if (hours == 12)
// Don't need to do anything.
else
hours += 12
endif
break
default:
// It's bogus, report error to user.
print "Error in Time2Secs: Could not parse AM/PM string."
return -1
EndSwitch
endif
// Do the conversion into seconds.
seconds += (minutes * 60) + (hours * 60 * 60)
return seconds
End
Note: Edited on June 29, 2010 to give correct results with time strings such as "12:30:30 AM" and "12:30:30 PM".
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More