如何将当前时间作为日期时间

JOS*_*Ftw 242 datetime swift

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

我已经创建了一个这样的日期对象:

var date = NSDate()
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得当前时间?在其他语言中,我可以这样做:

var hour = date.hour
Run Code Online (Sandbox Code Playgroud)

但我找不到任何类似的属性/方法.我找到了一种方法dateWithCalendarFormat.我应该用吗?如果是这样,怎么样?

nol*_*liv 361

Swift 3更新:

let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
let minutes = calendar.component(.minute, from: date)
Run Code Online (Sandbox Code Playgroud)

我这样做:

let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: date)
let hour = components.hour
let minutes = components.minute
Run Code Online (Sandbox Code Playgroud)

在objective-c中查看相同的问题如何从NSDate获取小时和分钟?

与Nate的答案相比,你会得到这个数字,而不是字符串...选择你的选择!

  • Swift 2.1:`let components = calendar.components([.hour,.Minute,.Second],fromDate:date)` (45认同)
  • 它看起来新的Swift版本(2)你必须使用类似于`let components = calendar.components(.NSCalendarUnit.Year.union(NSCalendarUnit.Minute),fromDate:date)`的东西,这里使用垂直斜杠了. (15认同)
  • `let components = calendar.components(NSCalendarUnit.Year.union(NSCalendarUnit.Minute),fromDate:date)`删除了额外的'.' 在NSCalendarUnit之前 (5认同)
  • @YestayMuratov这个方便的网页告诉我们使用Swift中的NSDateFormatter格式化日期的所有方法:) http://www.codingexplorer.com/swiftly-getting-human-readable-date-nsdateformatter/ (2认同)

Sur*_*gch 169

用Swift 4测试

获取当前日期和时间

您可以像这样简单地获取当前日期和时间:

let currentDateTime = Date()
Run Code Online (Sandbox Code Playgroud)

但是,Date是一个64位浮点数,用于衡量自2001年1月1日00:00:00 UTC的参考日期以来的秒数.我可以通过使用看到当前日期时间的数字

Date().timeIntervalSinceReferenceDate
Run Code Online (Sandbox Code Playgroud)

在撰写本文时,它又回来了497626515.185066,可能并不完全符合您的要求.继续阅读.

创建另一个日期和时间

方法1

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

let someOtherDateTime = Date(timeIntervalSinceReferenceDate: -123456789.0) // Feb 2, 1997, 10:26 AM
Run Code Online (Sandbox Code Playgroud)

方法2

当然,使用诸如年,月,日和小时(而不是相对秒)之类的东西会更容易Date.为此,您可以使用DateComponents指定组件,然后Calendar创建日期.在Calendar给出了Date上下文.否则,它将如何知道表达它的时区或日历?

// 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)
Run Code Online (Sandbox Code Playgroud)

其他时区缩写可以在这里找到.如果将其留空,则默认为使用用户的时区.

方法3

可以使用最简洁的方式(但不一定是最好的方式)DateFormatter.

let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm"
let someDateTime = formatter.date(from: "2016/10/08 22:31")
Run Code Online (Sandbox Code Playgroud)

统一的技术标准表明其他格式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
Run Code Online (Sandbox Code Playgroud)

也看到这个答案.

方法2

方法1为您提供了组件,但为每种样式,语言和区域格式化这些数字将是一项很大的工作.你不需要.这已经在DateFormatter课堂上为你完成了.

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

// initialize the date formatter and set the style
let formatter = DateFormatter()
formatter.timeStyle = .medium
formatter.dateStyle = .long

// get the date time String from the date object
formatter.string(from: currentDateTime) // October 8, 2016 at 10:48:53 PM
Run Code Online (Sandbox Code Playgroud)

以下是上述代码的延续,显示了更多格式选项:

// "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)
Run Code Online (Sandbox Code Playgroud)

但请记住,这是针对美国的英语区域.对于其他语言和区域,格式将看起来不同.

进一步研究


Sco*_*ner 55

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

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

  • Swift 3:让timestamp = DateFormatter.localizedString(from:Date(),dateStyle:.short,timeStyle:.short) (3认同)
  • 创建NSDateFormatter非常昂贵。您应该创建并重复使用它。 (2认同)

小智 50

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
    }
}
Run Code Online (Sandbox Code Playgroud)

使用此扩展程序,您现在可以执行以下操作:

        //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()))")
Run Code Online (Sandbox Code Playgroud)

上午11:51将写出:

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


Mat*_*ler 26

斯威夫特2回答:

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


Ena*_*que 24

您可以在 swift 4 或 5 中使用,如下所示

let date = Date()
let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateString = df.string(from: date)
Run Code Online (Sandbox Code Playgroud)

输出将如下所示

2019-12-20 09:40:08
Run Code Online (Sandbox Code Playgroud)


Kes*_*era 22

斯威夫特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
Run Code Online (Sandbox Code Playgroud)

OUTPUT

2018年5月1日10:41:31

  • 从不使用间隔。 (5认同)

Cha*_*man 11

斯威夫特3:

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)"
  }
Run Code Online (Sandbox Code Playgroud)

PS - 不确定问题的确切含义是将当前时间(和小时)作为日期时间,但希望上面的内容应该足以解释这个问题.


Ima*_*tit 10

使用Swift 3和Swift 4,Foundation可以通过多种方式获取Date对象的小时值.根据您的需要,您可以选择以下四个Playground代码段中的一个.


#1.使用Calendar dateComponents(_:from:)方法

Calendar有一个叫做的方法dateComponents(_:from:).dateComponents(_:from:)有以下声明:

func dateComponents(_ components: Set<Calendar.Component>, from date: Date) -> DateComponents
Run Code Online (Sandbox Code Playgroud)

使用日历时区返回日期的所有日期组件.

用法:

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)
Run Code Online (Sandbox Code Playgroud)

#2.使用Calendar component(_:from:)方法

Calendar有一个叫做的方法component(_:from:).component(_:from:)有以下声明:

返回日期的一个组件的值.

func component(_ component: Calendar.Component, from date: Date) -> Int
Run Code Online (Sandbox Code Playgroud)

用法:

import Foundation

let date = Date()
let hour = Calendar.current.component(.hour, from: date)
print(hour) // may print: 13
Run Code Online (Sandbox Code Playgroud)

#3.使用DateFormatter dateFormat财产

DateFormatter有一个叫做的财产dateFormat.dateFormat有以下声明:

var dateFormat: String! { get set }
Run Code Online (Sandbox Code Playgroud)

接收方使用的日期格式字符串.

用法:

import Foundation

let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH"
let hour = dateFormatter.string(from: date)
print(hour) // may print: 13
Run Code Online (Sandbox Code Playgroud)

#4.使用Dateformatter setLocalizedDateFormatFromTemplate(_:)方法

Dateformatter有一个叫做的方法setLocalizedDateFormatFromTemplate(_:).setLocalizedDateFormatFromTemplate(_:)有以下声明:

func setLocalizedDateFormatFromTemplate(_ dateFormatTemplate: String)
Run Code Online (Sandbox Code Playgroud)

使用指定的接收器区域设置从模板设置日期格式.

用法:

import Foundation

let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.setLocalizedDateFormatFromTemplate("HH")
let hour = dateFormatter.string(from: date)
print(hour) // may print: 13
Run Code Online (Sandbox Code Playgroud)


amo*_*mok 10

一行Swift 5.2

let date = String(DateFormatter.localizedString(from: Date(), dateStyle: .medium, timeStyle: .short))
Run Code Online (Sandbox Code Playgroud)


小智 7

如果你只需要一天的时间

let calendar = NSCalendar.currentCalendar()
var hour = calendar.component(.Hour,fromDate: NSDate())
Run Code Online (Sandbox Code Playgroud)


SaR*_* DM 6

在Swift 3中,

    let date = Date()
    let calendar = Calendar.current()

    let hour = calendar.component(.hour, from: date)
Run Code Online (Sandbox Code Playgroud)


Kay*_*Cee 6

使用Date Formatter -Swift 3.0

//Date
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
let dateString = "Current date is: \(dateFormatter.string(from: Date() as Date))"
labelfordate.text = String(dateString)


//Time    
let timeFormatter = DateFormatter()
timeFormatter.timeStyle = .medium
let timeString = "Current time is: \(timeFormatter.string(from: Date() as Date))"
labelfortime.text = String(timeString)
Run Code Online (Sandbox Code Playgroud)

每秒更新日期和时间

override func viewDidLoad() {
super.viewDidLoad()

timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(DateAndTime.action), userInfo: nil, repeats: true)

       }

func action()
    {
    //Date
    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = .medium
    let dateString = "Current date is: \(dateFormatter.string(from: Date() as Date))"
    labelfordate.text = String(dateString)


    //Time
    let timeFormatter = DateFormatter()
    timeFormatter.timeStyle = .medium
    let timeString = "Current time is: \(timeFormatter.string(from: Date() as Date))"
    labelfortime.text = String(timeString)

    }
Run Code Online (Sandbox Code Playgroud)

注意:Timer代码中的DateAndTime是类名.


小智 5

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

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)
    }
}
Run Code Online (Sandbox Code Playgroud)