【问题标题】:NSDateFormatter giving me two different days of the week, for the same dateNSDateFormatter 给了我一周中不同的两天,同一日期
【发布时间】:2016-06-21 21:56:48
【问题描述】:

有一堆日期,我想知道他们一周中的日子。但无论何时,我循环播放,即使在午夜之后,星期几也不会改变几个小时,我不知道为什么。 这是我的代码:

func parseArray(array: [HKQuantitySample])
{
let formatter = NSDateFormatter()
formatter.dateFormat = "EEEE"

for element in array
{
    let startDate: NSDate = element.startDate //example: 2015-11-13 13:30:07 +0000

    let startDateArray = String(startDate).componentsSeparatedByString(" ") // example: ["2015-11-13", "13:46:53", "+0000"]

    let startDateString = startDateArray[0] // example: 2015-11-13
    let startDateTimeString = startDateArray[1] // example: 13:58:39

    let startDateDayOfTheWeek = formatter.stringFromDate(startDate)

    print("startDate: \(startDateString), startTime: \(startDateTimeString), dayOfWeek: \(startDateDayOfTheWeek)")
}

这是我得到的:

startDate: 2015-11-12, startTime: 23:32:01, dayOfWeek: Thursday
startDate: 2015-11-12, startTime: 23:41:19, dayOfWeek: Thursday
startDate: 2015-11-12, startTime: 23:50:36, dayOfWeek: Thursday

/* 午夜 */

startDate: 2015-11-13, startTime: 00:07:35, dayOfWeek: Thursday
startDate: 2015-11-13, startTime: 00:19:19, dayOfWeek: Thursday
startDate: 2015-11-13, startTime: 00:32:20, dayOfWeek: Thursday
startDate: 2015-11-13, startTime: 00:41:37, dayOfWeek: Thursday
startDate: 2015-11-13, startTime: 00:55:34, dayOfWeek: Thursday
startDate: 2015-11-13, startTime: 01:04:51, dayOfWeek: Thursday
2016-06-21 17:39:10.446213 appleWatchHealth[1173:238873] [MC] Reading from public effective user settings.
startDate: 2015-11-13, startTime: 01:14:57, dayOfWeek: Thursday
startDate: 2015-11-13, startTime: 01:24:50, dayOfWeek: Thursday
startDate: 2015-11-13, startTime: 01:36:39, dayOfWeek: Thursday
startDate: 2015-11-13, startTime: 01:45:56, dayOfWeek: Thursday

因此,即使它从 12 日更改为 13 日,它仍然给我星期四。但是它确实会在下午 1 点左右变为星期五:

startDate: 2015-11-13, startTime: 13:01:31, dayOfWeek: Friday

另外,我不知道最后一行是什么意思:

2016-06-21 17:39:10.446213 appleWatchHealth[1173:238873] [MC] Reading from public effective user settings.

【问题讨论】:

  • 您的 startDateDayOfTheWeek 基于您的本地日期时间,因为您使用的是 NSDateFormatter,而您从原始 NSDate 构建的字符串使用的是 GMT。
  • Ohhh 我怎样才能改变它,使字符串也基于语言环境时间?
  • 当然只是使用另一个 NSDateFormatter 以您喜欢的任何格式打印字符串的日期部分。

标签: swift swift2 nsdate nsdateformatter


【解决方案1】:

String(startDate) 使用 startDate 的描述,纯粹是为了调试目的。您永远不应该将它用于最终用户看到的东西。因此,除了您看到的内容之外,没有办法让它显示任何其他内容。

每当您想将 NSDate 转换为最终用户可以看到的东西时,都应该使用 NSDateFormatter。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多