以大写形式快速显示 AM/PM

Posted

技术标签:

【中文标题】以大写形式快速显示 AM/PM【英文标题】:Show AM/PM in capitals in swift 【发布时间】:2015-07-17 05:53:34 【问题描述】:

我编写了以下代码以特定格式显示日期时间:

let formatter = NSDateFormatter()
formatter.dateStyle = NSDateFormatterStyle.LongStyle
formatter.timeStyle = .MediumStyle
formatter.dateFormat = "HH:mm a 'on' MMMM dd, yyyy"
let dateString = formatter.stringFromDate(newDate!)
println(dateString)

输出

12:16 pm on July 17, 2015

我想将“pm”显示为“PM”(大写),如果手机具有 24 小时格式,则不应出现 AM/PM。请帮我。

【问题讨论】:

【参考方案1】:

您可以如下设置 DateFormatter amSymbol 和 pmSymbol:

Xcode 8.3 • Swift 3.1

let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "h:mm a 'on' MMMM dd, yyyy"
formatter.amSymbol = "AM"
formatter.pmSymbol = "PM"

let dateString = formatter.string(from: Date())
print(dateString)   // "4:44 PM on June 23, 2016\n"

【讨论】:

感谢您的回复。这个对我有用。但是当手机有 24 小时格式时,AM/PM 不应该出现。我们能做到吗? @LeoDabus 实际上,除非您明确设置区域设置,否则 ios 会用系统设置覆盖格式化程序中设置的 12/24 格式。方法之一***.com/a/41817997/669586 不适用于 Xcode 9.1 let formatter = DateFormatter() formatter.timeZone = TimeZone.current formatter.dateFormat = "hh:mm a" formatter.amSymbol = "AM" formatter.pmSymbol = "PM " @DarshanMothreja 无需将时区设置为当前。日期格式化程序的默认时区它已经是当前时区。但是在使用固定日期格式时,您应该将其语言环境设置为 "en_US_POSIX" 它在这里为我工作"08:36 AM"。尝试创建一个新的 Playground 文件并在那里进行测试【参考方案2】:

在一处添加了一些格式。希望有人得到帮助。

Xcode 12 - Swift 5.3

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm:ss"
var dateFromStr = dateFormatter.date(from: "12:16:45")!

dateFormatter.dateFormat = "hh:mm:ss a 'on' MMMM dd, yyyy"
//Output: 12:16:45 PM on January 01, 2000

dateFormatter.dateFormat = "E, d MMM yyyy HH:mm:ss Z"
//Output: Sat, 1 Jan 2000 12:16:45 +0600

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
//Output: 2000-01-01T12:16:45+0600

dateFormatter.dateFormat = "EEEE, MMM d, yyyy"
//Output: Saturday, Jan 1, 2000

dateFormatter.dateFormat = "MM-dd-yyyy HH:mm"
//Output: 01-01-2000 12:16

dateFormatter.dateFormat = "MMM d, h:mm a"
//Output: Jan 1, 12:16 PM

dateFormatter.dateFormat = "HH:mm:ss.SSS"
//Output: 12:16:45.000

dateFormatter.dateFormat = "MMM d, yyyy"
//Output: Jan 1, 2000

dateFormatter.dateFormat = "MM/dd/yyyy"
//Output: 01/01/2000

dateFormatter.dateFormat = "hh:mm:ss a"
//Output: 12:16:45 PM

dateFormatter.dateFormat = "MMMM yyyy"
//Output: January 2000

dateFormatter.dateFormat = "dd.MM.yy"
//Output: 01.01.00

//Output: Customisable AP/PM symbols
dateFormatter.amSymbol = "am"
dateFormatter.pmSymbol = "Pm"
dateFormatter.dateFormat = "a"
//Output: Pm

// Usage
var timeFromDate = dateFormatter.string(from: dateFromStr)
print(timeFromDate)

【讨论】:

以上是关于以大写形式快速显示 AM/PM的主要内容,如果未能解决你的问题,请参考以下文章

在 UITextView 中以大写形式显示文本并从 shouldChangeTextIn 中获取新文本,以保持原始文本和输入文本的大小写

GetKeyNameText 以大写形式返回名称

c_cpp 管道示例:从进程中读取字符并在另一个进程中以大写形式显示

SQL大写函数[重复]

如何以 12 小时 AM/PM 格式显示 JavaScript 日期时间?

iOS 键盘 - 大写“完成”按钮