【问题标题】:How should I represent/store a song duration as a property? I want to use a common song duration format such as "HH:MM:SS"我应该如何将歌曲持续时间表示/存储为属性?我想使用常见的歌曲时长格式,例如“HH:MM:SS”
【发布时间】:2013-04-08 06:39:44
【问题描述】:

我有一个名为 Song 的自定义类。此类的每个实例都需要一个表示其持续时间的属性,并且我希望该持续时间采用正常的“歌曲”格式,例如 HH:MM:SS。 Song 实例将从 JSON 网络调用接收数据,例如持续时间,并且它们也可能通过 Core Data 或其他方法进行持久化。

存储此持续时间的选项有哪些?我是否需要存储它有一个类似的字符串

self.duration = @"0:2:14";

 self.duration = @"0.2.14";

将其存储为 NSDate 的 NSNumber 会更好吗?如果是这样,我如何将其转换为这些类型?如果我需要将其存储为字符串,有没有比拆分冒号更好的方法将其转换为数字/时间间隔?

【问题讨论】:

  • NSNumberNSDate 都没有一些特定的属性行为。在您的情况下,您只需要存储值以将其显示为05hours:23minutes:04seconds05:23:04 这些是固定值,您需要将其作为字符串,因此将它们存储为字符串。也将它存储为字符串,无论你如何使用,任何一个都可以。
  • 将其存储为表示秒数的整数。如果需求发生变化,这将提供轻松更改格式的灵活性。
  • @AnoopVaidya specific properties behaviours 是什么意思?
  • NSNumber 带有两位小数 (2.4.5) 或 (d:f:e) 我想看起来很尴尬,并且 nsdate 存储从 gmt 1jan1970 开始的时间间隔。所以你所有的歌曲都需要基于 1970 年。你真的需要那个吗/

标签: ios objective-c date model nsdate


【解决方案1】:

您应该将持续时间以秒为单位(如果您想精确到毫秒,则以毫秒为单位)存储为整数。然后在显示时间时将其转换为漂亮的格式,例如通过方法-(NSString*)displayDuration

如果你像这样声明你的持续时间属性

@property (nonatomic) int duration;

那么你可以编写一个方法来获取NSString 用于显示:

- (NSString*)displayDuration {
    int remainingDuration = self.duration;
    int seconds = remainingDuration%60;
    remainingDuration/=60;
    int minutes = remainingDuration%60;
    remainingDuration/=60;
    int hours = remainingDuration;
    return [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
}

【讨论】:

  • 难道没有更好的方法来使用NSDateFormatter 或类似的东西吗?
  • +1 用于存储为时间间隔并转换为“漂亮格式”的一般想法,但我会使用双精度(与 NSTimeInterval 相同)类型,而不是整数,我会考虑使用 NSDateFormatter 创建漂亮的字符串。不过,对于 HH:MM:SS,只有您的建议有效。
【解决方案2】:

使用NSDateComponent

let cal = NSCalendar.currentCalendar()            
let comps = cal.components([.Day, .Hour, .Minute], fromDate: self, toDate: otherDate, options: [])
return (comps.day , comps.hour , comps.minute)

其中 self 是 NSDate 而 otherDate 也是 NSDate(这是作为 NSDate 的扩展实现的)

根据需要添加组件(这里只有天、小时、分钟)

示例代码返回一个元组。可通过.0.1.2 访问,允许以任何必要的方式格式化字符串。

代码在 Swift 2 中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多