如何将当前时间获取为datetime

如何将当前时间获取为datetime,datetime,swift,Datetime,Swift,刚从操场开始。我正在尝试创建一个简单的应用程序 我创建了一个日期对象,如下所示: var date = NSDate() var hour = date.hour 我怎样才能知道现在的时间?在其他语言中,我可以这样做: var date = NSDate() var hour = date.hour 但是我找不到任何这样的属性/方法。我找到了一个方法,dateWithCalendarFormat。我应该用这个吗?如果是,如何更新?Swift 3的更新: let date = Date()

刚从操场开始。我正在尝试创建一个简单的应用程序

我创建了一个日期对象,如下所示:

var date = NSDate()
var hour = date.hour
我怎样才能知道现在的时间?在其他语言中,我可以这样做:

var date = NSDate()
var hour = date.hour

但是我找不到任何这样的属性/方法。我找到了一个方法,
dateWithCalendarFormat
。我应该用这个吗?如果是,如何更新?

Swift 3的更新:

let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)
static func currentTime() -> String {
    let date = Date()
    let calendar = Calendar.current
    let hour = calendar.component(.hour, from: date)
    let minutes = calendar.component(.minute, from: date)
    return "\(hour):\(minutes)"
}

我这样做:

let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: date)
let hour = components.hour
let minutes = components.minute
参见目标c中的相同问题


与内特的答案相比,你会得到这个数字,而不是字符串…选择你的选择

您也可以使用NSDateFormatter的便利方法,例如

func printTimestamp() {
  let timestamp = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .MediumStyle, timeStyle: .ShortStyle)
  print(timestamp)
}
printTimestamp() // Prints "Sep 9, 2014, 4:30 AM"

Swift使创建和使用扩展变得非常容易。我创建了一个
sharedCode.swift
文件,并将枚举、扩展名和其他有趣的东西放在其中。我创建了一个
NSDate
扩展来添加一些典型的功能,这些功能很难反复输入:

extension NSDate
{
    func hour() -> Int
    {
        //Get Hour
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.Hour, fromDate: self)
        let hour = components.hour

        //Return Hour
        return hour
    }


    func minute() -> Int
    {
        //Get Minute
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.Minute, fromDate: self)
        let minute = components.minute

        //Return Minute
        return minute
    }

    func toShortTimeString() -> String
    {
        //Get Short Time String
        let formatter = NSDateFormatter()
        formatter.timeStyle = .ShortStyle
        let timeString = formatter.stringFromDate(self)

        //Return Short Time String
        return timeString
    }
}
使用此扩展,您现在可以执行以下操作:

        //Get Current Date
        let currentDate = NSDate()

        //Test Extensions in Log
        NSLog("(Current Hour = \(currentDate.hour())) (Current Minute = \(currentDate.minute())) (Current Short Time String = \(currentDate.toShortTimeString()))")
在上午11点51分写下:

(当前小时=11)(当前分钟=51)(当前短时间字符串=11:51 AM)

Swift 2回答:

 let date = NSDate()
 let calendar = NSCalendar.currentCalendar()
 let components = calendar.components([.Hour, .Minute], fromDate: date)
 let hour = components.hour
 let minutes = components.minute

如果你只需要一天中的一小时

let calendar = NSCalendar.currentCalendar()
var hour = calendar.component(.Hour,fromDate: NSDate())
使用Swift 4进行测试

获取当前日期和时间 您可以通过以下方式获取当前日期和时间:

let currentDateTime = Date()
但是,
Date
是一个64位浮点数,用于测量自参考日期2001年1月1日00:00:00以来的秒数。我可以通过使用查看当前日期时间的数字

Date().timeIntervalSinceReferenceDate
在撰写本文时,它返回了
497626515.185066
,可能并不完全是您想要的。继续读

创建另一个日期和时间 方法1

如果您知道参考日期之前或之后的秒数,您可以使用它

let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM
方法2

extension Date {
    var hour: Int { return Calendar.autoupdatingCurrent.component(.hour, from: self) }
}
当然,使用年、月、日和小时(而不是相对秒)来创建
日期将更容易。为此,您可以使用
DateComponents
指定组件,然后使用
Calendar
创建日期。
日历
提供了
日期
上下文。否则,它怎么知道用什么时区或日历来表达呢

// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 1980
dateComponents.month = 7
dateComponents.day = 11
dateComponents.timeZone = TimeZone(abbreviation: "JST") // Japan Standard Time
dateComponents.hour = 8
dateComponents.minute = 34

// Create date from components
let userCalendar = Calendar.current // user calendar
let someDateTime = userCalendar.date(from: dateComponents)
还可以找到其他时区缩写。如果将该选项留空,则默认设置为使用用户的时区

方法3

最简洁的方法(但不一定是最好的)是使用
DateFormatter

let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31")
DateFormatter
支持的

显示日期和时间 方法1

如果只想显示日期或时间的某些组件,可以使用
CalendarUnit
指定要从
date
中提取的组件

// get the current date and time
let currentDateTime = Date()

// get the user's calendar
let userCalendar = Calendar.current

// choose which date and time components are needed
let requestedComponents: Set<Calendar.Component> = [
    .year,
    .month,
    .day,
    .hour,
    .minute,
    .second
]

// get the components
let dateTimeComponents = userCalendar.dateComponents(requestedComponents, from: currentDateTime)

// now the components are available
dateTimeComponents.year   // 2016
dateTimeComponents.month  // 10
dateTimeComponents.day    // 8
dateTimeComponents.hour   // 22
dateTimeComponents.minute // 42
dateTimeComponents.second // 17
以下是上述代码的延续,显示了更多格式选项:

// "10/8/16, 10:52 PM"
formatter.timeStyle = .short
formatter.dateStyle = .short
formatter.string(from: currentDateTime)

// "Oct 8, 2016, 10:52:30 PM"
formatter.timeStyle = .medium
formatter.dateStyle = .medium
formatter.string(from: currentDateTime)

// "October 8, 2016 at 10:52:30 PM GMT+8"
formatter.timeStyle = .long
formatter.dateStyle = .long
formatter.string(from: currentDateTime)

// "October 8, 2016"
formatter.timeStyle = .none
formatter.dateStyle = .long
formatter.string(from: currentDateTime)

// "10:52:30 PM"
formatter.timeStyle = .medium
formatter.dateStyle = .none
formatter.string(from: currentDateTime)
不过,请记住,这是针对英语的,因为该地区位于美国。对于其他语言和区域,格式将有所不同

进一步研究
    • 你可以试试这个

      func getTime() -> (hour:Int, min:Int, sec:Int) {
              let currentDateTime = NSDate()
              let calendar = NSCalendar.currentCalendar()
              let components = calendar.components([.Hour,.Minute,.Second], fromDate: currentDateTime)
              let hour = components.hour
              let min = components.minute
              let sec = components.second
              return (hour,min,sec)
          }
      
      现在调用该方法并接收带有小时、分钟和秒的日期

          let currentTime = self.getTime()
          print("Hour: \(currentTime.hour) Min: \(currentTime.min) Sec: \(currentTime.sec))")
      
      在Swift 3中

          let date = Date()
          let calendar = Calendar.current()
      
          let hour = calendar.component(.hour, from: date)
      

      Swift 3:

      let date = Date()
      let calendar = Calendar.current
      let hour = calendar.component(.hour, from: date)
      let minutes = calendar.component(.minute, from: date)
      
      static func currentTime() -> String {
          let date = Date()
          let calendar = Calendar.current
          let hour = calendar.component(.hour, from: date)
          let minutes = calendar.component(.minute, from: date)
          return "\(hour):\(minutes)"
      }
      

      PS-不确定以当前时间(和小时)作为日期时间的问题的确切含义,但希望上面的解释足以回答问题。

      仅针对特定格式的日期

          let dateFormatter1 = NSDateFormatter()
          dateFormatter1.dateStyle = .MediumStyle
          dateFormatter1.timeStyle = .NoStyle
          dateFormatter1.dateFormat = "dd-MM-yyyy"
          let date = dateFormatter1.stringFromDate(NSDate())
      
      使用日期格式化程序-Swift 3.0 每秒钟更新一次日期和时间
      注意:计时器代码中的日期和时间是类名。

      Xcode 8.2.1•Swift 3.0.2

      extension Date {
          var hour: Int { return Calendar.autoupdatingCurrent.component(.hour, from: self) }
      }
      


      使用Swift 5,
      Foundation
      提供了许多从
      Date
      对象获取小时值的方法。根据您的需要,您可以从以下四个游戏场代码片段中选择一个


      #1.使用
      日历
      日期组件(u:from:)
      方法
      Calendar
      有一个名为的方法
      dateComponents(_:from:)
      具有以下声明:

      func dateComponents(_ components: Set<Calendar.Component>, from date: Date) -> DateComponents
      
      var dateFormat: String! { get set }
      
      func setLocalizedDateFormatFromTemplate(_ dateFormatTemplate: String)
      

      #2.使用
      日历
      组件(u:from:)
      方法
      Calendar
      有一个名为的方法<代码>组件(quo:from:)
      具有以下声明:

      返回日期的一个组成部分的值

      用法:

      import Foundation
      
      let date = Date()
      let dateComponents = Calendar.current.dateComponents([.hour], from: date)
      let hour = dateComponents.hour
      print(String(describing: hour)) // may print: Optional(13)
      
      import Foundation
      
      let date = Date()
      let hour = Calendar.current.component(.hour, from: date)
      print(hour) // may print: 13
      
      import Foundation
      
      let date = Date()
      let dateFormatter = DateFormatter()
      dateFormatter.dateFormat = "HH"
      let hour = dateFormatter.string(from: date)
      print(hour) // may print: 13
      
      import Foundation
      
      let date = Date()
      let dateFormatter = DateFormatter()
      dateFormatter.setLocalizedDateFormatFromTemplate("HH")
      let hour = dateFormatter.string(from: date)
      print(hour) // may print: 13
      

      #3.使用
      DateFormatter
      dateFormat
      属性
      DateFormatter
      有一个名为的属性
      dateFormat
      具有以下声明:

      func dateComponents(_ components: Set<Calendar.Component>, from date: Date) -> DateComponents
      
      var dateFormat: String! { get set }
      
      func setLocalizedDateFormatFromTemplate(_ dateFormatTemplate: String)
      
      接收方使用的日期格式字符串

      用法:

      import Foundation
      
      let date = Date()
      let dateComponents = Calendar.current.dateComponents([.hour], from: date)
      let hour = dateComponents.hour
      print(String(describing: hour)) // may print: Optional(13)
      
      import Foundation
      
      let date = Date()
      let hour = Calendar.current.component(.hour, from: date)
      print(hour) // may print: 13
      
      import Foundation
      
      let date = Date()
      let dateFormatter = DateFormatter()
      dateFormatter.dateFormat = "HH"
      let hour = dateFormatter.string(from: date)
      print(hour) // may print: 13
      
      import Foundation
      
      let date = Date()
      let dateFormatter = DateFormatter()
      dateFormatter.setLocalizedDateFormatFromTemplate("HH")
      let hour = dateFormatter.string(from: date)
      print(hour) // may print: 13
      

      #4.使用
      Dateformatter
      setLocalizedDataFormatFromTemplate(:)
      方法
      Dateformatter
      有一个名为的方法
      setLocalizedDataFormatFromTemplate(:)
      具有以下声明:

      func dateComponents(_ components: Set<Calendar.Component>, from date: Date) -> DateComponents
      
      var dateFormat: String! { get set }
      
      func setLocalizedDateFormatFromTemplate(_ dateFormatTemplate: String)
      
      使用接收方的指定区域设置从模板设置日期格式

      用法:

      import Foundation
      
      let date = Date()
      let dateComponents = Calendar.current.dateComponents([.hour], from: date)
      let hour = dateComponents.hour
      print(String(describing: hour)) // may print: Optional(13)
      
      import Foundation
      
      let date = Date()
      let hour = Calendar.current.component(.hour, from: date)
      print(hour) // may print: 13
      
      import Foundation
      
      let date = Date()
      let dateFormatter = DateFormatter()
      dateFormatter.dateFormat = "HH"
      let hour = dateFormatter.string(from: date)
      print(hour) // may print: 13
      
      import Foundation
      
      let date = Date()
      let dateFormatter = DateFormatter()
      dateFormatter.setLocalizedDateFormatFromTemplate("HH")
      let hour = dateFormatter.string(from: date)
      print(hour) // may print: 13
      

      您可以从Dateformatter获得

      let dateFormatter = DateFormatter()
      dateFormatter.dateFormat = "dd/MM/yyyy"
      let dateString = dateFormatter.string(from:Date())
      print(dateString)
      

      您可以在
      日期
      创建扩展名,这样您就可以轻松地在其他文件中调用它。下面是一个使用计算属性的日期扩展的示例

      它会打印出来:“今天下午4:55”


      我知道有很多答案,但我认为我的答案对很多人来说可能更方便

      extension String {
          init(epoch: Double) {
              let date = Date(timeIntervalSince1970: epoch)
      
              let dateFormatter = DateFormatter()
              dateFormatter.dateFormat = "dd/MM/yyyy HH:mm:ssZZZ"
      
              self = dateFormatter.string(from: date)
          }
      }
      

      Swift 4

      let dateFormatter : DateFormatter = DateFormatter()
      //  dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
      dateFormatter.dateFormat = "yyyy-MMM-dd HH:mm:ss"
      let date = Date()
      let dateString = dateFormatter.string(from: date)
      let interval = date.timeIntervalSince1970
      
      输出


      2018-May-01 10:41:31

      以下是获取当前设备定位时间(GMT)的扩展

      现在开始时间:-

      Date().getGMTTimeDate()
      

      如果您需要以特定方式格式化答案,您可以轻松使用此方法,默认值为=“dd-MM-yyyy”

      现在可以使用

      Date().today() or Date().today("dd/MM/yyyy") 
      
      SWIFT 4:

      extension Date
      {
          func hour() -> Int
          {
          //Get Hour
          let calendar = Calendar.current
          let components = calendar.component(.hour, from: self)
          let hour = components
      
          //Return Hour
          return hour
          }
      
      
          func minute() -> Int
          {
          //Get Minute
          let calendar = Calendar.current
          let components = calendar.component(.minute, from: self)
          let minute = components
      
          //Return Minute
          return minute
              }
      }
      
      在此基础上进一步扩展,下面是更简洁的Swift 3/4实现:

      Swift 3/4

      let dateFormatter : DateFormatter = DateFormatter()
      //  dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
      dateFormatter.dateFormat = "yyyy-MMM-dd HH:mm:ss"
      let date = Date()
      let dateString = dateFormatter.string(from: date)
      let interval = date.timeIntervalSince1970
      
      let components=Calendar.current.dateComponents([.hour.minute],from:Date())
      让(小时、分钟)=(补偿)