1

我正在使用 swift 在 xcode 6.2 中使用日期格式化程序。它在 ios 8.1 中运行良好,但是当我在 8.1 以上的 ios 中测试我的应用程序时(我在 8.2 和 8.4 中尝试过),日期格式化程序不起作用。有没有人面临类似的问题。这是我得到的日期类型,字符串格式为 10-08-2015T13:59:53+0000我需要使用格式为“dd-MM-yyyy'T'HH:mm:ssZZZ”的日期格式化程序将其转换为日期 ,这是我将字符串转换为日期的方法:-

func dateFromString(dateString:String)->NSDate
    {

        print(dateString)
        var dateFormatter = NSDateFormatter()

        //yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ
        dateFormatter.dateFormat = "dd-MM-yyyy'T'HH:mm:ssZZZ"

        var date = dateFormatter.dateFromString(dateString)
        print(date)
        return date!
    }

对不起,我正在编辑 Qusetion。我找到了为什么会这样。在 iphone 的设置页面中,如果 24_hour_time 为 On,则工作正常。如果关闭,则只有日期格式化程序给出 nil date。我在其中插入了 GMT。它在 8.1.3 中工作正常,但给出8.4 中的问题

 dateFormatter.timeZone = NSTimeZone(name: "GMT")

谢谢快乐编码

4

2 回答 2

7

我找到了这个问题的答案。很抱歉延迟发布答案。您需要像我在本示例中所做的那样将NSLocale输入到格式化程序中。

func dateFromstring(dateString:String)->NSDate {
    //print(date)
    var dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "dd-MM-yyyy'T'HH:mm:ssZZZ"

    //DateFormatter To change By chakshu
    var enUSPOSIXLocale:NSLocale=NSLocale(localeIdentifier: "en_US_POSIX")
    dateFormatter.locale=enUSPOSIXLocale
    dateFormatter.timeZone = NSTimeZone(name: "GMT")
    //dateFormatter.timeZone = NSTimeZone.localTimeZone()

    var date = dateFormatter.dateFromString(dateString)
    //print(date)
    return date!
}

希望这有帮助。谢谢

于 2015-09-11T04:50:43.747 回答
2

警告

  • 格式化程序的函数名称与自定义函数的名称相同。不是说这是你的问题,而是可能不是故意的。
  • 在某些情况下,您再次使用 var 而不是 let 不会导致错误

否则,您的代码将返回正确的日期......但采用日期格式,而不是字符串。

要以您想要的格式打印它,只需将日期转换回所需的字符串格式:

func dateFromString(dateString:String)->NSDate
    {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "dd-MM-yyyy'T'HH:mm:ssZZZ"
        let date = dateFormatter.dateFromString(dateString)
        return date!
    }

let formatter = NSDateFormatter()
formatter.dateFormat = "dd/M/yyyy, H:mm"

print(formatter.stringFromDate(dateFromString("10-08-2015T13:59:53+0000")))

在这里运行以测试最新的 Swift ......没问题

于 2015-08-10T14:38:10.873 回答