Sqlite 您能否使用AM/PM将24小时时间字符串格式化为12小时时间字符串?
我在sqlite中以%H:%M字符串格式(例如“15:43”)存储了一些时间值,但我希望使用AM/PM指示器以12小时格式(例如“3:43 PM”)将它们格式化。sqlite是否可以实现这一点(如果可以,如何实现),或者我需要在我的应用程序代码中实现这一点?一些伪代码可以帮助您:Sqlite 您能否使用AM/PM将24小时时间字符串格式化为12小时时间字符串?,sqlite,Sqlite,我在sqlite中以%H:%M字符串格式(例如“15:43”)存储了一些时间值,但我希望使用AM/PM指示器以12小时格式(例如“3:43 PM”)将它们格式化。sqlite是否可以实现这一点(如果可以,如何实现),或者我需要在我的应用程序代码中实现这一点?一些伪代码可以帮助您: if (hourpart of time >= 12) subtract 12 from hours append string " pm" else // hourpart < 12
if (hourpart of time >= 12)
subtract 12 from hours
append string " pm"
else // hourpart < 12
append string " am"
end if
我不能完全确定所有这些都是有效的SQLite语法,但您应该能够纠正错误。在您的应用程序中这样做。以正常的24小时格式存储在数据库中。在数据库中,它可以存储为日期条目而不是字符串(如果我错了,请纠正我)除非您使用自己的扩展sqlite,否则您必须这样做
sqlite的日期格式化函数只支持其C对应函数的一小部分,不足以解决您的问题。还缺少IF或CASE之类的选择构造,使得简单的IF/else变得不可能。正如PoweRoy所建议的,这属于应用程序
建议在通信中存储的任何类型的数据都使用标准的、不区分区域设置的格式:这里介绍了一些特殊情况。我使用“now”作为源,但您可以根据您的字符串对其进行调整:
select
CASE
--For 00:05, for example.
WHEN (strftime('%H', 'now', 'localtime') - 12) = -12
THEN '12:' || strftime('%M', 'now', 'localtime') ||' '|| 'AM'
--For 12:05, for example.
WHEN (strftime('%H', 'now', 'localtime') - 12) = 0
THEN '12:' || strftime('%M', 'now', 'localtime') ||' '|| 'PM'
--other am time
WHEN (strftime('%H', 'now', 'localtime') - 12) < 0
THEN strftime('%H', 'now', 'localtime') ||':'||
strftime('%M', 'now', 'localtime') ||' '|| 'AM'
ELSE
--other pm time
(cast(strftime('%H', 'now', 'localtime') as integer) - 12) ||':'||
strftime('%M', 'now', 'localtime') ||' '|| 'PM'
END here_you_go_usa;
选择
案例
--例如,00:05。
当(strftime(“%H”、“now”、“localtime”)-12)=-12时
然后是“12:”|| strftime(“%M”,“now”,“localtime”)|“AM”
--比如12:05。
当(strftime(“%H”、“now”、“localtime”)-12)=0
然后是“12:”|| strftime(“%M”,“now”,“localtime”)| |“PM”
--其他上午时间
当(strftime(“%H”、“now”、“localtime”)-12)小于0时
然后strftime('%H','now','localtime')| |':'||
strftime(“%M”、“now”、“localtime”)| |“| |”AM”
其他的
--下午其他时间
(将strftime('%H','now','localtime')转换为整数)-12)| |':'||
strftime(“%M”、“now”、“localtime”)| |“| |”PM”
在这里结束你去美国;
这里有一个正在工作的..多亏了托马斯
SELECT
PatientName,
CASE WHEN
StrFTime('%H', AppointmentTime) % 12 = 0 THEN 12
ELSE StrFTime('%H', AppointmentTime) % 12 END
|| ':' ||
StrFTime('%M', AppointmentTime)
|| ' ' ||
CASE WHEN
StrFTime('%H', AppointmentTime) > 12 THEN 'PM'
ELSE 'AM' END
`APP_TIME`
From Patients;
输出阿卜杜勒·萨利姆,下午12:05
SELECT
PatientName,
CASE WHEN
StrFTime('%H', AppointmentTime) % 12 = 0 THEN 12
ELSE StrFTime('%H', AppointmentTime) % 12 END
|| ':' ||
StrFTime('%M', AppointmentTime)
|| ' ' ||
CASE WHEN
StrFTime('%H', AppointmentTime) > 12 THEN 'PM'
ELSE 'AM' END
`APP_TIME`
From Patients;