Latest Version Swift Platforms

Swift Package Manager Cocoapods Cathage Manually

CodeCoverage License Contribution First Timers Friendly

Size Files

JustTime

JustTime 是一个轻量级的 Swift 库,它提供了独立于日期的时间和持续时间类型。

使用场景

类型

该库包含三种主要类型:Time、TimeRange 和 Duration。

特性

🧪 测试

该库几乎完全经过测试,代码覆盖率达到 94.2%

💻 安装

Swift Package Manager

要使用 Swift Package Manager 将 JustTime 添加到您的项目中,请在您的 Package.swift 文件中添加以下依赖项

dependencies: [
    .package(url: "https://github.com/ChristianFox/JustTime.git", from: "1.0.0")
]

不要忘记将 JustTime 添加到您的目标依赖项中

targets: [
    .target(
        name: "YourTarget",
        dependencies: ["JustTime"]),
]

🛠️ 用法

Time

创建一个新的 Time 实例

let time = Time(hour: 14, minute: 30, second: 45) // 14:30:45
let midnight = Time() // 00:00:00

从 Date 创建一个 Time 实例

let now = Date()
let currentTime = try Time(fromDate: now)

将 Time 实例四舍五入到若干分钟

let time = Time(hour: 14, minute: 20)
let newTime = time.roundedToNearest(minutes: 30) // 14:30

将 TimeInterval 添加到 Time 实例

let time = Time(hour: 14, minute: 30)
let newTime = time.adding(3600) // Adds 1 hour, 15:30

从 Time 实例中减去 TimeInterval

let time = Time(hour: 14, minute: 30)
let newTime = time.subtracting(3600) // Subtracts 1 hour, 13:30

计算 Time 实例和稍后时间之间的持续时间

let startTime = Time(hour: 9, minute: 0)
let endTime = Time(hour: 17, minute: 0)
let duration = startTime.duration(tillLaterTime: endTime) // Duration of 8 hours

如果我们使用比接收者值低的“稍后时间”调用该函数,则参数晚于接收者的声明被认为是正确的,因此 timeB 必须表示前一天的时间,结果为 16 小时。

let timeA = Time(hour: 9, minute: 0)
let timeB = Time(hour: 17, minute: 0)
let duration = timeB(tillLaterTime: timeA) // Duration of 16 hours

TimeRange

创建一个新的 TimeRange 实例

let workHours = TimeRange(start: Time(hour: 9), end: Time(hour: 17))

检查 Time 实例是否包含在 TimeRange 中

let time = Time(hour: 12)
let isWithinRange = workHours.contains(time) // true

检查两个 TimeRange 实例是否重叠

let lunchBreak = TimeRange(start: Time(hour: 12), end: Time(hour: 13))
let meeting = TimeRange(start: Time(hour: 11, minute: 30), end: Time(hour: 12, minute: 30))
let hasOverlap = lunchBreak.overlaps(meeting) // true

将 TimeRange 拆分为更小的 TimeRange

let workHours = TimeRange(start: Time(hour: 9), end: Time(hour: 17))
let hourlySlots = workHour.split(by: 60) // An array of 8 TimeRanges

Duration

创建一个新的 Duration

let duration = Duration(hours: 1, minutes: 1, seconds: 1) // 01:01:01
let zero = Duration() // 00:00:00
let normalised = Duration(hours: 0, minutes: 175, seconds: 300) // 03:00:00

将 Duration 添加到另一个

let a = Duration(hours: 1, minutes: 1, seconds: 1)
let b = Duration(hours: 10, minutes: 10, seconds: 10)
let c = a + b // 11:11:11

从另一个 Duration 中减去 Duration

let a = Duration(hours: 100, minutes: 30, seconds: 20)
let b = Duration(hours: 10, minutes: 10, seconds: 10)
let c = b - a // 90:20:10

🐕‍🦺 支持

打开一个 issue以获得支持。

👷‍♂️ 贡献

欢迎提交 pull request。 我欢迎所有技能水平的开发人员帮助改进库、修复错误或添加新功能。

对于重大更改,请先打开一个 issue 讨论您想要更改的内容。

在提交 pull request 之前,请确保您的代码符合现有的代码样式和规范,并且所有测试均已通过。 此外,如果您添加新功能,请务必包含单元测试来验证行为。

如果您有任何问题或需要帮助,请随时打开一个 issue,我会尽力帮助您。

🪪 许可

JustTime 在 MIT 许可下可用。 有关更多信息,请参阅 LICENSE 文件。

Buy Me A Coffee