当前位置: 首页 > 面试题库 >

如何将NSDate对象设置为午夜?

柳项明
2023-03-14
问题内容

我有一个NSDate对象,我想将它设置为任意时间(比如半夜),这样我可以使用timeIntervalSince1970的功能一致,而不用担心时间来检索数据
创建的对象。

我尝试使用NSCalendar和通过一些Objective-C方法修改其组件,如下所示:

let date: NSDate = NSDate()
let cal: NSCalendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)!

let components: NSDateComponents = cal.components(NSCalendarUnit./* a unit of time */CalendarUnit, fromDate: date)
let newDate: NSDate = cal.dateFromComponents(components)

上述方法的问题在于,您只能设置一个时间单位(/* a unit of time */),因此您只能精确地选择以下其中一项:

  1. 小时
  2. 分钟

有没有办法同时设置小时,分钟和秒并保留日期(日/月/年)?


问题答案:

您的声明

上述方法的问题是您只能设置一个时间单位…

是不正确的。NSCalendarUnit符合RawOptionSetType继承自的协议BitwiseOperationsType。这意味着可以将选项与&和进行按位组合|

Swift 2(Xcode 7)中, 它再次更改为OptionSetType提供类似集合的接口。

因此,以下html" target="_blank">代码可以在iOS 7和iOS 8中编译并运行:

let date = NSDate()
let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!

// Swift 1.2:
let components = cal.components(.CalendarUnitDay | .CalendarUnitMonth | .CalendarUnitYear, fromDate: date)
// Swift 2:
let components = cal.components([.Day , .Month, .Year ], fromDate: date)

let newDate = cal.dateFromComponents(components)

(请注意,我省略了变量的类型注释,Swift编译器会从赋值右侧的表达式自动推断类型。)

也可以使用rangeOfUnit()方法(iOS 7和iOS 8)确定给定日期(午夜)的开始:

let date = NSDate()
let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
var newDate : NSDate?

// Swift 1.2:
cal.rangeOfUnit(.CalendarUnitDay, startDate: &newDate, interval: nil, forDate: date)
// Swift 2:
cal.rangeOfUnit(.Day, startDate: &newDate, interval: nil, forDate: date)

如果 您的部署目标是iOS 8,那么它甚至更简单:

let date = NSDate()
let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let newDate = cal.startOfDayForDate(date)

Swift 3(Xcode 8) 更新

let date = Date()
let cal = Calendar(identifier: .gregorian)
let newDate = cal.startOfDay(for: date)


 类似资料:
  • 问题内容: 对于我正在使用的插件,我必须具有如下所示的状态: 我如何在不设置其余访问权限的情况下设置hospital_id的状态? 这似乎删除了除了hospital_id之外的所有内容: 问题答案: 您有几种选择: 借助ECMA6,您可以使用对象传播建议()创建具有更新属性的对象的副本。 您可以在对象()上使用本机分配功能 或为最短的版本和原子更新: 还有一个选项是更新插件: 我建议使用第一个。

  • 问题内容: 我用Java 创建了一个对象。当我这样做时,它显示如下:。结果,我的Excel文件似乎减少了一天(27 feb变为26 feb,依此类推),我认为这一定是因为时间的缘故。如何将其设置为下午5:30? 问题答案: 另请参阅 乔达时间 日历文件

  • 我从网络服务中获得日期,如“2012-07-03 07:26:48”。从webservice解析后,我已保存在NSString中。将NSString转换为下面代码中使用的NSDate时, NSLog值为“2012-07-03 01:56:48 0000”;我不知道为什么时间变了。谁能帮我做这个?

  • 问题内容: 如何从字符串返回预定义时区中的NSDate 上面的代码返回时间为 问题答案: 如何在预定义的时区中返回NSDate? 你不能 的实例不包含有关时区或日历的任何信息。它只是简单地确定了通用时间的一点。 您可以在任何日历中解释该对象。Swift的字符串插值(示例代码的最后一行)使用的是使用UTC(即输出中的“ +0000”)的。 如果要将的值作为当前用户日历中的字符串,则必须为此显式设置日

  • 问题内容: 在Hadoop MapReduce中,对于中间输出(由map()生成),我希望中间输出的值成为以下对象。 我该怎么做。我应该创建自己的可写类吗? 我是MapReduce的新手。 谢谢。 问题答案: 您可以编写自定义类型,将其作为映射器值发出。但是无论您要发出什么值,都必须实现可写接口。您可以执行以下操作: 另外,您可以使用Avro序列化框架。

  • 我是骆驼的新手,我被困在一个似乎很简单的问题上。我需要解组交换中的2个XML,然后将相应的POJO传递给处理器。我在考虑是否可以取消整理一个xml,将其设置为一个属性作为交换,并对另一个xml重复相同的属性。最后,在处理器中,我将检索属性,并可以在处理器中执行所需的逻辑。我能够成功地解组XML的,并获得exchange.in.body中的最后一个POJO。但是有人能告诉我在exchange属性中设