相关疑难解决方法(0)

如何创建日期时间戳并格式化为ISO 8601,RFC 3339,UTC时区?

如何使用ISO 8601RFC 3339的格式标准生成日期时间戳?

目标是一个如下所示的字符串:

"2015-01-01T00:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)

格式:

  • 年,月,日,如"XXXX-XX-XX"
  • 字母"T"作为分隔符
  • 小时,分钟,秒,毫秒,如"XX:XX:XX.XXX".
  • 字母"Z"作为零偏移的区域指示符,也就是UTC,GMT,Zulu时间.

最佳案例:

  • Swift源代码简单,简洁,直观.
  • 无需使用任何其他框架,子项目,cocoapod,C代码等.

我搜索过StackOverflow,Google,Apple等,并没有找到Swift的答案.

似乎最有前途的类NSDate,NSDateFormatter,NSTimeZone.

相关问答:如何在iOS中获得ISO 8601日期?

这是迄今为止我提出的最好的:

var now = NSDate()
var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
println(formatter.stringFromDate(now))
Run Code Online (Sandbox Code Playgroud)

time date iso8601 rfc3339 swift

172
推荐指数
6
解决办法
10万
查看次数

Swift - 获取当地日期和时间

如何在Swift中获取本地日期和时间?

let last_login = String(NSDate.date())
Run Code Online (Sandbox Code Playgroud)

nsdate ios swift

20
推荐指数
8
解决办法
3万
查看次数

Swift - 显示时间的更新/刷新标签

我有一个标签,以12小时格式显示当前时间.

但是,每次分钟/小时更改时,它都不会更新/刷新时间.

我需要它在时间变化时自动将标签更改为当前时间.

ios swift swift3

2
推荐指数
1
解决办法
1万
查看次数

如何在 Swift 中查找给定日期的午夜

我创建了一个行程生成应用程序,要求用户输入他/她的旅行日期。唯一的问题是,使用 UIDatePicker 时,日期始终作为给定日/月/年的当前时间给出。

在一个单独的文件中,我扩展了 Date 类来尝试编写一个简单的方法,该方法将返回给定日期的午夜。

首先我尝试过

    var midnight:Date{
    let cal = Calendar(identifier: .gregorian)
    return cal.startOfDay(for: self)
}
Run Code Online (Sandbox Code Playgroud)

然而,这总是给我 04:00 或 05:00,具体取决于夏令时,这给了我一个想法,我应该根据夏令时简单地删除 4 或 5 小时,因此我创建了以下方法:

    var timezone:TimeZone{
    return TimeZone.current
}
///Returns the first instance of the date, e.g. 2018-02-26 00:00:00
var trueMidnight:Date{
    let cal = Calendar(identifier: .gregorian)
    let midnight = cal.startOfDay(for: self)
    let secondsFromGMT = TimeZone.current.secondsFromGMT()
    print("Daylight savings? \(daylightSavings)")
    return midnight.addingTimeInterval(Double(secondsFromGMT))
}
///If this var returns true, then daylight savings time is active and an hour of daylight is …
Run Code Online (Sandbox Code Playgroud)

date nsdate swift

2
推荐指数
1
解决办法
9425
查看次数

您如何在DateFormatters的Date&Time设置中正确支持iOS 12小时/ 24小时覆盖?

如果您的iOS设备设置为使用默认为12小时制的区域(例如美国),并且您具有如下DateFormatter设置:

var dateFormatter: DateFormatter = {
    let formatter = DateFormatter()
    formatter.dateFormat = "h:mm a"

    return formatter
}()
Run Code Online (Sandbox Code Playgroud)

然后,它会输出,如果“24小时时间”开关接通的24小时格式的时间ON的日期和时间设置在iOS中。

如果您的自定义日期格式为“ H:mm”(即24小时),而您仍处于默认的12h区域,则无论24小时开关的打开/关闭状态如何,它都将输出24小时时间。

好的,很好,很简单,我将使用“ h:mm a”,然后用户将根据自己喜欢的格式看到显示的任何时间。但是,如果您将区域更改为默认情况下使用24小时制的区域,则行为会相反!如果您具有“ H:mm”并且24小时制时间开关处于OFF位置,它将更改为12小时制(“ h:mm a”)。

是的,通常可以通过使用时间样式(formatter.timeStyle = .short例如,)而不是使用自定义日期格式来避免这种情况,但是如果您需要自定义日期格式并且要遵守用户的设置,应该怎么办?(例如,如果您需要在字符串中插入一些自定义字符,或者只是想按非标准顺序使用组件)

我想在这里也要吃蛋糕的唯一方法是提前检查用户的喜好(据我所知,您实际上不能直接做)或语言环境的默认设置是(我虽然看不到任何方法来做),然后相应地调整格式…

我做了这个Xcode项目,以更清楚地演示该问题(显然,它必须在设备上运行,因为模拟器上没有24小时切换)。

我知道有各种各样的解决方法,但是如果您要制作的应用程序使用自定义日期/时间格式作为UI并具有来自世界不同地区的用户,那么我不希望Apple期望您做什么。我是否缺少某些东西,或者这是iOS中的缺陷?

注意:此问题专门用于将日期转换为字符串以供显示,因此,我希望尽可能遵守用户的语言环境和其他设置。我知道您可以将语言环境设置为en_POSIX等,但这不能解决问题。我也希望尽可能地做到无缝,并充分利用内置的功能,但这似乎不可能实现,除非您仅将目标用户设置为具有相同默认24小时制的地区…

locale ios regional-settings swift dateformatter

2
推荐指数
1
解决办法
1482
查看次数

日期总是在同一时间返回

我有一个扩展设置,String以相同的格式返回当前日期,以便可以调用代码中的任何位置并使用相同的格式,从而保持一致性.我的代码是

extension String {
    static let dateString = DateFormatter.localizedString(from: Date(), dateStyle: .short, timeStyle: .short)
}
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,当我调用它时,返回相同的确切时间,直到应用程序被杀死.如果我正在使用Date()那么它每次都应该使用新的价值,对吧?为什么不是这样?

date swift

2
推荐指数
1
解决办法
61
查看次数

在初始化时设置日期格式化程序(例如)?

假设您有一个全局的日期格式化程序

let df:DateFormatter = DateFormatter()
Run Code Online (Sandbox Code Playgroud)

理想情况下.dateFormat,在相同的全局初始化时间进行设置会很好- 有点像这样

let df:DateFormatter = DateFormatter().dateFormat = "yyyy-MM-dd"
Run Code Online (Sandbox Code Playgroud)

但是DateFormatter没有替代的初始化(没有像这样的东西DateFormatter(withDateFormat: "yyyy-MM-dd"))

真的,有一个Swift解决方案吗?是否存在任何类之外的代码块的语法,它可以在任何类型之前运行,并且可以在其中设置这种性质的东西?

(注意 - 我完全了解替代方法,如单例,扩展等:这是一个Swift结构问题,谢谢.)

swift

1
推荐指数
1
解决办法
904
查看次数

从swift4中的时区获取日期和时间

我有一个时区String类型,我想在 Swift 4 中的这个时区获取日期(带格式dd:mm:yyyy)和时间(带格式hh:mm:ss)。我该怎么做?

我看过日历库,但我不明白如何查看它来解决我的问题。

time timezone date swift swift4

-1
推荐指数
1
解决办法
5677
查看次数