Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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
Swift 无法获取两个日期之间的毫秒差_Swift_Nscalendar - Fatal编程技术网

Swift 无法获取两个日期之间的毫秒差

Swift 无法获取两个日期之间的毫秒差,swift,nscalendar,Swift,Nscalendar,在我的应用程序中,我需要一些计时器,比如倒计时。和下一场比赛一样,还有1年2个月6天23分24秒5毫秒 为此,我使用以下代码: extension DateComponentsFormatter { func difference(from fromDate: Date, to toDate: Date) -> String? { self.allowedUnits = [.year,.month,.day,.hour, .minute, .second ,.nan

在我的应用程序中,我需要一些计时器,比如倒计时。和下一场比赛一样,还有1年2个月6天23分24秒5毫秒

为此,我使用以下代码:

extension DateComponentsFormatter {
    func difference(from fromDate: Date, to toDate: Date) -> String? {
        self.allowedUnits = [.year,.month,.day,.hour, .minute, .second ,.nanosecond]
        self.maximumUnitCount = 8
        self.unitsStyle = .full
        return self.string(from: fromDate, to: toDate)
    }
}
但我没有得到毫秒

以下是我得到的:

["24 years", " 8 months", " 20 days", " 12 hours", " 2 minutes", " 48 seconds"]

我需要毫秒。

不能使用
日期组件格式设置毫秒格式。根据,仅允许使用以下日历单位:

  • 年份
  • 月份
  • weekOfMonth
  • day
  • hour
  • 分钟
  • second
您必须自己设置格式,通过获取日期之间的
TimeInterval
,获取时间间隔的小数部分,并设置格式

这是一个什么样的想法

extension DateComponentsFormatter {
    func difference(from fromDate: Date, to toDate: Date) -> String? {
        self.allowedUnits = [NSCalendar.Unit.second]
        allowsFractionalUnits = true
        self.maximumUnitCount = 8
        self.unitsStyle = .full
        guard let firstPart = self.string(from: fromDate, to: toDate) else { return nil }
        let milliseconds = abs(toDate.timeIntervalSince(fromDate)).remainder(dividingBy: 1) * 1000
        let numberFormatter = NumberFormatter()
        numberFormatter.maximumFractionDigits = 0
        guard let secondPart = numberFormatter.string(from: milliseconds as NSNumber) else { return nil }
        return "\(firstPart) \(secondPart) milliseconds"
    }
}

let formatter = DateComponentsFormatter()
formatter.difference(from: Date(), to: Date().addingTimeInterval(0.5))