Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode Swift am/pm时间转换为24小时格式_Swift_Time_Nsdateformatter - Fatal编程技术网

Xcode Swift am/pm时间转换为24小时格式

Xcode Swift am/pm时间转换为24小时格式,swift,time,nsdateformatter,Swift,Time,Nsdateformatter,我正在尝试将am/pm格式时间转换为24小时格式时间 6:35 PM to 18:35 我在操场上试过这段代码,但似乎没有 如果我把时间放在一个人身上,那就工作吧 let dateAsString = "02/12/15, 6:35 PM" let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "HH" let date = dateFormatter.dateFromStrin

我正在尝试将am/pm格式时间转换为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

有人知道如何做到这一点吗?

只需使用NSDateFormatter和“h:mm a”格式将其转换为日期,然后使用“HH:mm”格式将其转换回字符串即可。看看这个,熟悉一下这个材料


在我的案例中,我使用了一个函数,通过该函数,我用正常时间格式更新标签,然后存储所选时间的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.
}
编写此函数后,您可以在从日期/时间选择器选择时间的位置调用此函数

谢谢,
希望这能有所帮助。

以下是其他方法的代码

适用于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
}

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
}
时间格式为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)
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)
输出将是12小时格式的日期:下午1:15

时间格式12小时到24小时

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

以下是解决方案的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)

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


请随意评论。谢谢

Swift 3*

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())
12小时(即上午和下午)转换为24小时格式的代码,包括-

小时:分钟:秒:上午/下午至小时:分钟:秒

输入

晚上7:05:45

输出

19:05:45

类似地

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

小时:分钟:秒到小时:分钟:秒:上午/下午

输入

19:05:45

输出

晚上7:05:45


不幸的是,苹果公司优先考虑设备日期格式,因此在某些情况下,根据您提出的要求,swift将您的格式更改为12小时

要解决此问题,需要使用SetLocalizedDataFormatFromTemplate而不是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())
您可以查看一篇非常有用的文章,详细信息请参见

使用此功能进行日期转换,当您的设备处于24/12小时格式时,其工作正常


以下是更多额外格式的答案

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

这与我们的朋友的回答类似:但利用我们所有的互联网朋友的想法,我想出了以下更完整的单一解决方案:

let amPmFormat = "h:mm a"
let twentyFourHFormat = "HH:mm"
func hourMinuteParser(date: Date) -> KotlinInt{
    let formatter = DateFormatter()
    if DateFormatter.dateFormat(fromTemplate: "j",options:0, locale: Locale.current)!.contains("a") {
        formatter.dateFormat = amPmFormat
    }else{
        formatter.dateFormat = twentyFourHFormat
    }
    let stringTime = formatter.string(from: date)
    let time = formatter.date(from: stringTime)
    formatter.dateFormat = twentyFourHFormat

    let time24 = formatter.string(from: time!)
    let timeWithoutSpecialCharacters = time24.replacingOccurrences(of: ":", with: "")
    let int2 = Int32(timeWithoutSpecialCharacters) ?? 0
    return KotlinInt(int: int2)
}

这将解析您的时间,即使与它的格式无关,并将其输出为HH:mm,您可以将第三种格式更改为您想要的任何格式。

如果设备时间为24小时格式,则此代码将为零。有什么建议吗?请尝试在dateFormatter声明后添加以下行。dateFormatter.locale=NSLocale(localeIdentifier:“en_US_POSIX”)作为区域设置!这就解决了我的问题。@Tejinder@Nipul-Daki我给出了区域设置标识符,问题就解决了!formatter.locale=locale(标识符:“en_US_POSIX”)这个问题是关于从12小时时间到24小时时间的问题,这个答案涉及到了另一个方向。答案不正确!!你很困惑,因为你是在用12:41:42测试。请尝试下午1点或更高。嗨,如果用户输入6:11AM,我如何转换为2019-03-09 13:38:32+0000的格式,因此您必须使用当前日期和时间(用户提供的输入)这在操场和模拟器中工作正常。在设备中运行时,其未转换从24小时格式更改为12小时格式时,我需要添加dateFormatter.locale=locale(标识符:“en_US_POSIX”)强制它忽略设备区域设置。这只是日期的转换!您可以尝试将设备设置为24小时格式。以上代码在我的情况下不起作用。这是我在那里发现的将上午/下午时间转换为24小时时间的唯一有效方法。谢谢这不是军事时间。导入UIKit let date=date()打印(“Date:”,Date)让dateFormatter=dateFormatter()dateFormatter.dateFormat=“h:mm a”让Date12Hr=dateFormatter.string(from:Date)打印(“12小时格式化日期:”,Date12)这在操场或模拟器中可以正常工作..在设备中运行时,它不会被转换吗??(小时>=12)-因为中午12点是下午12点,午夜12点是上午12点。
let amPmFormat = "h:mm a"
let twentyFourHFormat = "HH:mm"
func hourMinuteParser(date: Date) -> KotlinInt{
    let formatter = DateFormatter()
    if DateFormatter.dateFormat(fromTemplate: "j",options:0, locale: Locale.current)!.contains("a") {
        formatter.dateFormat = amPmFormat
    }else{
        formatter.dateFormat = twentyFourHFormat
    }
    let stringTime = formatter.string(from: date)
    let time = formatter.date(from: stringTime)
    formatter.dateFormat = twentyFourHFormat

    let time24 = formatter.string(from: time!)
    let timeWithoutSpecialCharacters = time24.replacingOccurrences(of: ":", with: "")
    let int2 = Int32(timeWithoutSpecialCharacters) ?? 0
    return KotlinInt(int: int2)
}