- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试计算宠物存活的周数和天数。我正在为此使用 SwiftDate。所以我让用户选择生日并将其与当前日期进行比较。
我不想比较时间...所以生日和当前日期应该是同一时间。
我的代码是:
let greg = Calendar(identifier: .gregorian)
var date1 = birthday // from datepicker
var date2 = Date()
var components1 = greg.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date1)
var components2 = greg.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date2)
components1.hour = 15
components1.minute = 0
components1.second = 0
components2.hour = 15
components2.minute = 0
components2.second = 0
date1 = greg.date(from: components1)!
date2 = greg.date(from: components2)!
let daysAlive = (date2 - date1).in(.day)
let weeksAlive = Int(weeksAlive! / 7)
let restDays = daysAlive! - (weeksAlive * 7)
let aLive = "Age: \(weeksAlive) wk, \(restDays) d (\(daysAlive!) d)"
输出是“年龄:28周,3天(199天)”
代码有效……但我该如何重构它?是否有更简单的方法来为两个给定日期设置“同一时间”?
最佳答案
要忽略时间,只需省略 .hour
、.minute
和 .second
的组件即可
let components1 = greg.dateComponents([.year, .month, .day], from: date1)
let components2 = greg.dateComponents([.year, .month, .day], from: date2)
date1 = greg.date(from: components1)!
date2 = greg.date(from: components2)!
这是一个没有任何第三方库的更简单的解决方案。它使用 Calendar
方法 dateComponents( :from:to:
。不需要额外的数学运算。
let greg = Calendar(identifier: .gregorian)
var date1 = greg.date(from: DateComponents(year: 2017, month: 6, day: 25))!
var date2 = Date()
var components1 = greg.dateComponents([.year, .month, .day], from: date1)
var components2 = greg.dateComponents([.year, .month, .day], from: date2)
let weeksAndDays = greg.dateComponents([.weekOfMonth, .day], from: components1, to: components2)
let justDays = greg.dateComponents([.day], from: components1, to: components2)
let aLive = "Age: \(weeksAndDays.weekOfMonth!) wk, \(weeksAndDays.day!) d (\(justDays.day!) d)"
// "Age: 28 wk, 3 d (199 d)"
关于SwiftDate 和日期计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48196304/
我正在尝试计算宠物存活的周数和天数。我正在为此使用 SwiftDate。所以我让用户选择生日并将其与当前日期进行比较。 我不想比较时间...所以生日和当前日期应该是同一时间。 我的代码是: let g
我使用SwiftDate库,但我无法将我的字符串转换为最新的。此代码返回 null let date = "Tue, 19 Sep 2017 15:43:57 GMT".date(format: .
使用 SwiftDate lib 获取两个日期之间的小时数的最简单方法是什么? 在这种情况下,小时可以是天/分钟或我下次需要的任何时间。 我知道我可能可以执行 (date1 - date2)/60 *
使用 SwiftDate lib 获取两个日期之间的小时数的最简单方法是什么? 在这种情况下,小时可以是天/分钟或我下次需要的任何时间。 我知道我可能可以执行 (date1 - date2)/60 *
是否可以使用 SwiftDate 将日期(例如以分钟为单位)转换为另一种格式图书馆?例如: 77 minutes = 1 hour, 17 minutes 最佳答案 为什么不使用 this图书馆?您可
我正在使用 Swift 开发 iOs 应用程序,并且是应用程序开发的新手。我用 SwiftDate处理日期的外部库。 SwiftDate与 CocoaPods 一起安装,并在项目中正确导入。 但我无法
如何将 2018 年 10 月 12 日上午 10:45:46 转换为 SwiftDate DateInRegion?我的代码返回零: let ds = "12 Oct 2018 at 10:
我已经在我的应用程序中显示了时区列表。如果用户选择特定时区,我需要将本地时区更改为用户选择的时区。 let region = Region(tz: timeZoneName.timeZone , c
我正在尝试将日期字符串解析为 Date 类。我为此使用 SwiftDate。但是当我尝试解析它时,它返回的值比字符串中的值少 1 天。以下是一些示例: let birthString = "1996-
当我通过 Cocoapods 安装 SwiftDate 并尝试构建我的项目时,我从 SwiftDate 库中收到三个错误: /Pods/SwiftDate/Sources/SwiftDate/Date
我正在将我的项目从 Carthage 迁移到 SPM。我正在使用 Xcode 12.0。构建主应用程序没有任何问题,但我无法再运行我的单元测试。我使用相同的框架 SwiftDate v6.2.0 在我
我是一名优秀的程序员,十分优秀!