Xcode将上午/下午时间快速转换为24小时格式


71

我正在尝试将上午/下午的格式时间转换为24小时的格式时间

6:35 PM to 18:35

我在操场上尝试了这段代码,但如果我把时间单独花在那儿似乎不起作用

let dateAsString = "02/12/15, 6:35 PM"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "HH"
let date = dateFormatter.dateFromString(dateAsString) //returns nil

有谁知道如何做到这一点?

谢谢。


导入UIKit let date = Date()print(“ Date:”,date)let dateFormatter = DateFormatter()dateFormatter.dateFormat =“ h:mm a” let Date12Hr = dateFormatter.string(from:date)print(“ 12小时格式化日期:“,Date12)在操场或模拟器中正常工作。在设备中运行时未转换?
SANTOSH

Answers:


157

只需使用NSDateFormatter和“ h:mm a”格式将其转换为日期,然后使用“ HH:mm”格式将其转换回字符串即可。请查看此日期格式指南,以熟悉此材料。

在此处输入图片说明

let dateAsString = "6:35 PM"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "h:mm a"
let date = dateFormatter.dateFromString(dateAsString)

dateFormatter.dateFormat = "HH:mm"
let date24 = dateFormatter.stringFromDate(date!)

11
如果设备时间为24小时格式,则此代码为nil。有什么建议吗?
Tejinder

14
试试这个在dateFormatter声明之后添加以下行。dateFormatter.locale = NSLocale(localeIdentifier:“ en_US_POSIX”)作为语言环境!这解决了我的问题。
Nipul Daki

58

迅捷3

时间格式为24小时至12小时

let dateAsString = "13:15"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"

let date = dateFormatter.date(from: dateAsString)
dateFormatter.dateFormat = "h:mm a"
let Date12 = dateFormatter.string(from: date!)
print("12 hour formatted Date:",Date12)

输出将是12小时格式化的日期:1:15 PM

时间格式12小时至24小时

let dateAsString = "1:15 PM"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "h:mm a"

let date = dateFormatter.date(from: dateAsString)
dateFormatter.dateFormat = "HH:mm"

let Date24 = dateFormatter.string(from: date!)
print("24 hour formatted Date:",Date24)

输出将是24小时格式的日期:13:15


10
从24小时格式更改为12小时格式时,我需要添加dateFormatter.locale = Locale(identifier:“ en_US_POSIX”)以强制其忽略设备区域设置。
三利

这只是日期的转换!
Azharhussain Shaikh,

2
您可以尝试将设备设置为24小时格式。上面的代码不适用于我的情况。
三利

11

斯威夫特3 *

12小时(即AM和PM)转换为24小时格式的代码,其中包括-

小时:分钟:秒:AM / PM到小时:分钟:秒

func timeConversion24(time12: String) -> String {
    let dateAsString = time12
    let df = DateFormatter()
    df.dateFormat = "hh:mm:ssa"

    let date = df.date(from: dateAsString)
    df.dateFormat = "HH:mm:ss"

    let time24 = df.string(from: date!)
    print(time24)
    return time24
}

输入项

下午07:05:45

输出量

19:05:45

相似地

24小时转换为12小时(即AM和PM)格式的代码,其中包括-

小时:分钟:秒至小时:分钟:秒:AM / PM

func timeConversion12(time24: String) -> String {
    let dateAsString = time24
    let df = DateFormatter()
    df.dateFormat = "HH:mm:ss"

    let date = df.date(from: dateAsString)
    df.dateFormat = "hh:mm:ssa"

    let time12 = df.string(from: date!)
    print(time12)
    return time12
}

输入项

19:05:45

输出量

下午07:05:45


5

以下是该解决方案的Swift 3版本-

let dateAsString = "6:35:58 PM"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "h:mm:ss a"
let date = dateFormatter.date(from: dateAsString)

dateFormatter.dateFormat = "HH:mm:ss"
let date24 = dateFormatter.string(from: date!)
print(date24)

4

Swift版本3.0.2,Xcode版本8.2.1(8C1002)(12小时格式):

func getTodayString() -> String{

        let formatter = DateFormatter()
        formatter.dateFormat = "h:mm:ss a "
        formatter.amSymbol = "AM"
        formatter.pmSymbol = "PM"

        let currentDateStr = formatter.string(from: Date())
        print(currentDateStr)
        return currentDateStr 
}

输出: 12 41 42 AM

随时发表评论。谢谢


这个问题是关于从12小时到24小时的时间,这个答案涉及到另一个方向。
阿比森

1
不正确的答案!您很困惑,因为您正在使用12:41:42进行测试。尝试1pm或更高。
TheTiger's

嗨,如果用户输入6:11 AM,如何将这种格式转换为2019-03-09 13:38:32 +0000
Gorib Developer

因此您必须使用带有时间的当前日期(用户提供的输入)
Shobhakar Tiwari

这项工作在操场上和模拟器中很好..在未转换的设备中运行时
SANTOSH

3

使用此功能进行日期转换,当您的设备采用24/12小时格式时,可以正常使用

参见https://developer.apple.com/library/archive/qa/qa1480/_index.html

func convertDateFormatter(fromFormat:String,toFormat:String,_ dateString: String) -> String{
    let formatter = DateFormatter()
    formatter.locale = Locale(identifier: "en_US_POSIX")
    formatter.dateFormat = fromFormat
    let date = formatter.date(from: dateString)
    formatter.dateFormat = toFormat
    return  date != nil ? formatter.string(from: date!) : ""
}

1

这是其他方式的代码

对于Swift 3

 func amAppend(str:String) -> String{
    var temp = str
    var strArr = str.characters.split{$0 == ":"}.map(String.init)
    var hour = Int(strArr[0])!
    var min = Int(strArr[1])!
    if(hour > 12){
        temp = temp + "PM"
    }
    else{
        temp = temp + "AM"
    }
    return temp
}

不应该(小时> = 12)-因为中午12:00是中午12点,午夜00.00是中午12点
iKK

1
let calendar = Calendar.current
let hours    = calendar.component(.hour, from: Date())
let minutes  = calendar.component(.minute, from: Date())
let seconds  = calendar.component(.second, from: Date())

这不是军事时间。
WikipediaBrown

1

不幸的是,苹果将设备日期格式设置为优先级,因此在某些情况下,与您输入的内容不同,请迅速将格式更改为12小时

要解决此问题,必须使用setLocalizedDateFormatFromTemplate而不是dateFormat来隐藏AM和PM

let formatter = DateFormatter()
formatter.setLocalizedDateFormatFromTemplate("HH:mm:ss a")
formatter.amSymbol = ""
formatter.pmSymbol = ""
formatter.timeZone = TimeZone(secondsFromGMT: 0)
var prettyDate = formatter.string(from: Date())

您可以在https://prograils.com/posts/the-curious-case-of-the-24-hour-time-time-format-in-swift中查看包含更多详细信息的非常有用的帖子。


1

这是更多格式的答案。

** 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)

0

在这种情况下,我在这里使用一个函数,通过该函数我可以用正常的时间格式更新标签,然后再存储所选时间的24小时格式以执行其他一些任务。

这是我的代码...

func timeUpdate(sender: NSDate)
{
    let timeSave = NSDateFormatter() //Creating first object to update time label as 12hr format with AM/PM
    timeSave.timeStyle = NSDateFormatterStyle.ShortStyle //Setting the style for the time selection.
    self.TimeShowOutlet.text = timeSave.stringFromDate(sender) // Getting the string from the selected time and updating the label as 1:40 PM
    let timeCheck = NSDateFormatter() //Creating another object to store time in 24hr format.
    timeCheck.dateFormat = "HH:mm:ss" //Setting the format for the time save.
    let time = timeCheck.stringFromDate(sender) //Getting the time string as 13:40:00
    self.timeSelectedForCheckAvailability = time //At last saving the 24hr format time for further task.
}

编写此函数后,您可以在从日期/时间选择器中选择时间的地方调用此函数。

谢谢,希望对您有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.