【问题标题】:Convert milliseconds into day,hour,minute and second iOS? [duplicate]将毫秒转换为日、时、分和秒 iOS? [复制]
【发布时间】:2016-03-03 11:51:35
【问题描述】:

我需要将毫秒转换为天、时、分秒。

例如:5 天 4 小时 13 分钟 1 秒。

谢谢

【问题讨论】:

  • 发帖前请先搜索
  • 请检查我的回答。
  • 让 totalSeconds : Double = Double(totalSeconds) let days = Int(floor(totalSeconds / (60*60*24))) var remainingSeconds = totalSeconds % (60*60*24) let hours = Int(floor(remainingSeconds / (60*60))) remainingSeconds = remainingSeconds % (60*60) let minutes = Int(floor(remainingSeconds / (60))) remainingSeconds = remainingSeconds % (60) let seconds = Int(floor(剩余秒数))打印(“秒:(秒)分钟:(分钟)小时:(小时)天:(天)”)

标签: ios date date-arithmetic


【解决方案1】:

如果你不想自己计算,你可以选择这样的解决方案。

不过,我知道这是一个成本很高的解决方案,因此您需要注意运行时潜在的性能问题 - 取决于您打算调用它的频率。


NSTimeInterval _timeInSeconds = 123456789.123; // or any other interval...;

NSCalendar *_calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
NSCalendarUnit _units = NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *_components = [_calendar components:_units fromDate:[NSDate date] toDate:[NSDate dateWithTimeIntervalSinceNow:_timeInSeconds] options:kNilOptions];

NSLog(@"%ld Days, %ld Hours, %ld Minutes, %ld Seconds", _components.day, _components.hour, _components.minute, _components.second);

【讨论】:

  • 我们得到 14116 天,16 小时,0 分钟,0 秒的结果。请检查小时。如果小时数大于 12,则添加天数 1。你理解我的问题吗?
  • 我不敢提但是...一天有 24 小时(不是 12 小时!),因此时间将在间隔 [0-23] 中,据此有 16 小时是完美的有效的;或者您如何看待地球上正常的一天有多少小时?
  • 我的答案怎么样?
【解决方案2】:

您可以像这样编写自己的函数:

import UIKit

let miliseconds: Int = 24 * 3600 * 1000 + 3700 * 1000
// 1 day and 1 hour 1 minute 40 seconds

func convertTime(miliseconds: Int) -> String {

    var seconds: Int = 0
    var minutes: Int = 0
    var hours: Int = 0
    var days: Int = 0
    var secondsTemp: Int = 0
    var minutesTemp: Int = 0
    var hoursTemp: Int = 0

    if miliseconds < 1000 {
        return ""
    } else if miliseconds < 1000 * 60 {
        seconds = miliseconds / 1000
        return "\(seconds) seconds"
    } else if miliseconds < 1000 * 60 * 60 {
        secondsTemp = miliseconds / 1000
        minutes = secondsTemp / 60
        seconds = (miliseconds - minutes * 60 * 1000) / 1000
        return "\(minutes) minutes, \(seconds) seconds"
    } else if miliseconds < 1000 * 60 * 60 * 24 {
        minutesTemp = miliseconds / 1000 / 60
        hours = minutesTemp / 60
        minutes = (miliseconds - hours * 60 * 60 * 1000) / 1000 / 60
        seconds = (miliseconds - hours * 60 * 60 * 1000 - minutes * 60 * 1000) / 1000
        return "\(hours) hours, \(minutes) minutes, \(seconds) seconds"
    } else {
        hoursTemp = miliseconds / 1000 / 60 / 60
        days = hoursTemp / 24
        hours = (miliseconds - days * 24 * 60 * 60 * 1000) / 1000 / 60 / 60
        minutes = (miliseconds - days * 24 * 60 * 60 * 1000 - hours * 60 * 60 * 1000) / 1000 / 60
        seconds = (miliseconds - days * 24 * 60 * 60 * 1000 - hours * 60 * 60 * 1000 - minutes * 60 * 1000) / 1000
        return "\(days) days, \(hours) hours, \(minutes) minutes, \(seconds) seconds"
    }
}

convertTime(miliseconds)
//result is "1 days, 1 hours, 1 minutes, 40 seconds"

【讨论】:

  • 看图,不知道为什么你说这样不行??
  • 这行不通,因为一秒有 1000 毫秒,而不是 100 毫秒。
  • 不关心 OP 请求的 小时
  • 噢,我忘记了 1 秒等于 1000 毫秒,而不是 100 毫秒 =))。但是功能是对的,我只是写了一个示例代码让他知道,时间和日期与那些非常相似。
  • 不过我会尽快更新答案,给我10分钟。
【解决方案3】:

试试这个

NSTimeInterval time = <timein ms>;

NSInteger  days = time / (24 * 60 * 60);
NSInteger hours =  (time / (60 * 60)) - (24 * days);
NSInteger minutes =(time / 60) - (24 * 60 * days) - (hours * 60);
NSInteger seconds = (lroundf(time) % 60);

【讨论】:

  • 你不是说time = &lt;timein ms&gt; / 1000;吗?
  • 抱歉抱歉我更新了代码
  • 我根本看不出该代码是如何工作的。为什么- (24 * days);? 24天有什么意义?
  • 感谢 NSTimeInterval 默认以秒为单位
  • 但你将它乘以days?你测试过代码吗?
【解决方案4】:

我已经在 Objective-c 和 Swift 中编写了简单的代码来做到这一点:

斯威夫特

    var milliseconds : double_t =  568569600;

    milliseconds =  floor(milliseconds/1000);
    let seconds : double_t = fmod(milliseconds, 60);
    let minutes  : double_t = fmod((milliseconds / 60) , 60);
    let hours  : double_t = fmod((milliseconds / (60*60)), 60);
    let days : double_t = fmod(milliseconds / ((60*60)*24), 24);


    NSLog("seconds : %.f minutes : %.f hours : %.f days : %.f", seconds, minutes, hours, days);

输出 - 秒:9 分钟:56 小时:38 天:7

目标

        double milliseconds =  568569600;

    milliseconds =  milliseconds/1000;
    float seconds = fmod(milliseconds, 60);
    float minutes = fmod((milliseconds / 60) , 60);
    float hours = fmod((milliseconds / (60*60)), 60);
    float days = fmod(milliseconds / ((60*60)*24), 24);


    NSLog(@"seconds : %.f minutes : %.f hours : %.f days : %.f ", seconds, minutes, hours, days);

输出 - 秒:10 分钟:56 小时:38 天:7

【讨论】:

  • 这是不正确的。您所做的只是将毫秒转换为秒然后分钟然后小时等。目标是将毫秒分解为天/小时/分钟/秒。
  • 我已经更新了代码。那么,你现在可以试试吗?
  • 看起来确实更好。
  • @trojanfoeThankq :)
  • 让小时数:double_t = fmod(milliseconds / (60*60), 60) >= 24 ? fmod(milliseconds / (60*60), 60) - 24 : fmod(milliseconds / (60*60), 60) 我认为我们应该使用这个数小时
猜你喜欢
  • 1970-01-01
  • 2013-07-11
  • 2012-09-27
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 2013-01-12
  • 1970-01-01
相关资源
最近更新 更多