您可以使用AM / PM将24小时时间字符串格式化为12小时的时间字符串吗?

时间:2009-02-11 08:13:12

标签: sqlite

我在sqlite中以%H:%M字符串格式存储一些时间值(例如“15:43”),但是我希望以12小时格式将它们格式化为AM / PM指示符(例如“下午3:43“)。这是可能的sqlite(如果是这样,如何),或者我需要在我的应用程序代码中执行此操作?

6 个答案:

答案 0 :(得分:4)

一些伪代码可以帮助您:

if (hourpart of time >= 12)
    subtract 12 from hours
    append string " pm"
else // hourpart < 12
    append string " am"
end if

在SQL中,您可以使用CASE语法完成此操作。


仔细研究一下这个问题:

SELECT (CASE HOUR(myTimeColumn) >= 12 WHEN 1 THEN
         ((HOUR(myTimeColumn) - 12) + '-' + MINUTE(myTimeColumn) + ' pm')
       ELSE
         (HOUR(myTimeColumn) + '-' + MINUTE(myTimeColumn) + ' am')
       AS AmPmTime,
       someOtherColumn
FROM myTable

我不完全确定所有这些都是有效的SQLite语法,但您应该能够纠正错误。

答案 1 :(得分:4)

除非您使用自己的custom function扩展sqlite,否则您必须执行此操作。

sqlite的strftime日期格式化功能仅支持其C对应部分的一小部分,不足以解决您的问题。 sqlite也缺少像IF或CASE这样的选择结构,如果/不可能那么简单。

答案 2 :(得分:2)

这里有一些特殊情况。我使用'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;

答案 3 :(得分:1)

在您的申请中执行此操作。将其以正常的24小时格式存储在数据库中。在数据库中,它可以存储为Date条目而不是字符串(如果我错了,请纠正我)

答案 4 :(得分:0)

正如PoweRoy所建议的那样,这属于应用程序。

建议在通信中使用的任何类型的数据都使用标准的,区域设置不敏感的格式:http://www.mihai-nita.net/article.php?artID=20051025a

答案 5 :(得分:0)

这是一个工作的人...... 感谢Tomas

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;      

<强>输出
Abdul Salim,12:05 PM