截断 NSDate(时间清零)
我想生成一个新的 NSDate
,时间为 0 小时、0 分钟 和 0 秒。源日期可以是任何随机的NSDate
。
有办法实现这一点吗?该文档并没有帮助我解决这个问题。
示例
拥有:2010-10-30 10:14:13 GMT
想要:2010-10-30 00:00:00 GMT
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
date
是您要删除时间的日期。这会将日期和时间分开,并使用默认时间 (00:00:00) 创建一个新日期。
编辑
要考虑时区:
date
is the date you want to remove the time from.This separates the date and time and creates a new date with the default time (00:00:00).
EDIT
To take time zone into account:
使用 NSCalendar 的
rangeOfUnit:startDate:interval:forDate:
。此代码将根据当前时区选择日期边界。如果你想要一个特定的时区,你需要创建一个 NSCalendar 并适当地设置它的时区。Use NSCalendar's
rangeOfUnit:startDate:interval:forDate:
. This code will choose the day boundary based on the current time zone. If you want a particular time zone, you need to create an NSCalendar and set its time zone appropriately.使用 Swift 3,您可以选择以下四种模式之一来解决您的问题。
#1.使用
日历
startOfDay(for:)
startOfDay(for:)
具有以下声明:下面的 Playground 代码展示了如何使用此方法:
#2。使用
日历
日期(bySettingHour:分钟:秒:of:matchingPolicy:repeatedTimePolicy:方向:)
date(bySettingHour:min:second:of:matchingPolicy:repeatedTimePolicy:direction:)
具有以下声明:下面的 Playground 代码展示了如何使用此方法:
#3。使用
Calendar
dateComponents(_:from:)
和date(from:)
方法dateComponents(_:from:)
具有以下声明:date(from:)
具有以下内容宣言:下面的 Playground 代码展示了如何使用这些方法:
#4。使用
NSCalendar
range(of:start:interval:for:)
range(of:start:interval:for:)
具有以下声明:下面的 Playground 代码展示了如何使用此方法:
With Swift 3, you can choose one of the four following patterns in order to solve your problem.
#1. Using
Calendar
startOfDay(for:)
startOfDay(for:)
has the following declaration:The Playground code below shows how to use this method:
#2. Using
Calendar
date(bySettingHour:minute:second:of:matchingPolicy:repeatedTimePolicy:direction:)
date(bySettingHour:minute:second:of:matchingPolicy:repeatedTimePolicy:direction:)
has the following declaration:The Playground code below shows how to use this method:
#3. Using
Calendar
dateComponents(_:from:)
anddate(from:)
methodsdateComponents(_:from:)
has the following declaration:date(from:)
has the following declaration:The Playground code below shows how to use those methods:
#4. Using
NSCalendar
range(of:start:interval:for:)
range(of:start:interval:for:)
has the following declaration:The Playground code below shows how to use this method:
我知道已经晚了,但现在有更好的方法:
你为什么不直接使用
Swift 2
Swift 5
I know its late, but there are now better methods:
why dont you just use
Swift 2
Swift 5
斯威夫特3
Swift 3
我将使用描述方法将给定日期作为字符串获取,然后修改该字符串并使用 initWithString 创建新日期。
用字符串初始化:
返回一个 NSDate 对象,该对象使用国际字符串表示格式中给定字符串指定的日期和时间值进行初始化。
参数
描述
以国际字符串表示格式 YYYY-MM-DD HH:MM:SS ±HHMM 指定日期和时间值的字符串,其中 ±HHMM 是相对于 GMT 的时区偏移量(以小时和分钟为单位)(例如,“2001- 03-24 10:45:32 +0600”)。
您必须指定格式字符串的所有字段,包括时区偏移量,该偏移量必须具有加号或减号前缀。
返回值
使用 aString 指定的日期和时间值初始化的 NSDate 对象。
I would use the description method to get the given date as a string, then modify the string and create your new date with initWithString.
initWithString:
Returns an NSDate object initialized with a date and time value specified by a given string in the international string representation format.
Parameters
description
A string that specifies a date and time value in the international string representation format—YYYY-MM-DD HH:MM:SS ±HHMM, where ±HHMM is a time zone offset in hours and minutes from GMT (for example, “2001-03-24 10:45:32 +0600”).
You must specify all fields of the format string, including the time zone offset, which must have a plus or minus sign prefix.
Return Value
An NSDate object initialized with a date and time value specified by aString.