我有一个时间间隔,比如说12600,相当于3小时30分钟.我如何设置任何此类时间间隔的格式,以便只保留时间间隔的最高部分(例如,在本例中为小时),并将正确的区域设置缩写添加到数字中.例如10米(10分钟)、3天(3天)、1年(1年).


编辑:以下是一些例子:

Time interval in: 90000    Whole string: 1d      String out: 1d
Time interval in: 900      Whole string: 15m     String out: 15m
Time interval in: 13500    Whole String: 3h 45m  String out: 4h

作为一般规则,应用正常的四舍五入规则(向下3.4舍入,向上3.6舍入).

推荐答案

如果您的目标是更新的操作系统版本(iOS 13.5+、OS X 10.15+),您可以使用RelativeDateTimeFormatter:

let formatter = RelativeDateTimeFormatter()
formatter.dateTimeStyle = .named

for d in [-12600.0, -90000.0, -900.0, 13500.0] {
    let str = formatter.localizedString(fromTimeInterval: d)
    print("\(d): \(str)")
}

// Output
-12600.0: 3 hours ago
-90000.0: yesterday
-900.0: 15 minutes ago
13500.0: in 3 hours

对于较旧的操作系统版本,请使用从iOS 8开始提供的DateComponentFormatter:

func format(duration: TimeInterval) -> String {
    let formatter = DateComponentsFormatter()
    formatter.allowedUnits = [.day, .hour, .minute, .second]
    formatter.unitsStyle = .abbreviated
    formatter.maximumUnitCount = 1

    return formatter.string(from: duration)!
}

for d in [12600.0, 90000.0, 900.0, 13500.0] {
    let str = format(duration: d)
    print("\(d): \(str)")
}

这张照片是:

12600.0: 4h
90000.0: 1d
900.0: 15m
13500.0: 4h

Swift相关问答推荐

SwiftUI map 旋转

如何把多个可观测性变成一个完备性?

在Swift中,将秒设置为0也等于将1添加到分钟

找出touch 点的屏幕亮度

ClosedRange.Swift 中 Int 的索引?

如何制作进度加载动画?

如何打印出此 struct 中的数据?

如何制作具有 2 个视图的 3D 旋转动画?

关联满足约束时的快速协议方法

SwiftUI:调用以编程方式创建的视图的函数

Xcode:方法参数的代码完成

.onTapGesture 不适用于 Stepper,仅适用于其文本

阻止其他类型的键盘

仅在 Swift 中创建 Setter

在 UItextfield 的右视图上添加一个按钮,文本不应与按钮重叠

Type 应该采用什么协议来让泛型函数将任何数字类型作为 Swift 中的参数?

自定义 MKAnnotation 标注视图?

Swift 中的 recursiveDescription 方法?

通过单击表格视图中的单元格打开新的视图控制器 - Swift iOS

如何在 Swift 中从字符串创建类的实例