如何在 ios 中将数据类型声明为时间戳 - swift

Posted

技术标签:

【中文标题】如何在 ios 中将数据类型声明为时间戳 - swift【英文标题】:How to declare data type as Timestamp in ios - swift 【发布时间】:2019-02-21 09:03:05 【问题描述】:

我是一个新的ios编程。我正在创建一个与Firestore 集成的简单程序。在Firestore 我创建了集合,每个文档都包含许多字段。

我在文档中添加了Timestamp 字段。当我在xcode 中创建模型时,我如何将我的变量声明为Timestamp,因为我需要基于TimestamptableView 上的数据进行排序。

这就是Firestore 中的Timestamp 的样子:

September 17, 2018 at 3:37:43 PM UTC+7

那么,我如何编写程序并获得当前的Timestamp,就像在Firestore 中显示的那样

这是在编程中:

struct RecentCallModel 

var call_answered: Bool?
var call_extension: String?
var call_type: String?
var details: String?
var duration:  String?
var title: String?
// How can i declare as Timestamp
var timestamp: ???

init(call_answered: Bool, call_extension: String, call_type: String, details: String , duration: String, timestamp: String,  title: String) 

    self.call_answered = call_answered
    self.call_extension = call_extension
    self.call_type = call_type
    self.details = details
    self.title = title
 



【问题讨论】:

简单使用Double 如何在编程中获取当前的Timestamp?? Firestore 应该将该字段返回为 Timestamp 类型。您可以通过在其上使用.dateValue() 方法获得Date 查看此处的文档:firebase.google.com/docs/reference/swift/firebasefirestore/api/… 【参考方案1】:

不熟悉 Firebase。但通常,在 iOS 中,我们将时间戳存储为 TimeInterval,它们是 Double 的类型别名。

class func getDateOnly(fromTimeStamp timestamp: TimeInterval) -> String  
  let dayTimePeriodFormatter = DateFormatter()
  dayTimePeriodFormatter.timeZone = TimeZone.current 
  dayTimePeriodFormatter.dateFormat = "MMMM dd, yyyy - h:mm:ss a z" 
  return dayTimePeriodFormatter.string(from: Date(timeIntervalSince1970: timestamp)) 
 

【讨论】:

试试 NSDate 或 Simply Date 变量。这应该工作 那么,我怎样才能编写程序并获得当前的Timestamp 就像在Firestore 中显示的那样 试试这个方法 class func getDateOnly(fromTimeStamp timestamp: TimeInterval) -> String let dayTimePeriodFormatter = DateFormatter() dayTimePeriodFormatter.timeZone = TimeZone.current dayTimePeriodFormatter.dateFormat = "MMM dd YYYY" return dayTimePeriodFormatter.string (来自:日期(timeIntervalSince1970:时间戳)) 您显然必须更改日期格式。但在此之前,您确定这是 Firestore 返回您的时间戳,而不是日期。从根本上说,它们是你所知道的两种不同的东西。 好的!让我试试那些方法【参考方案2】:

这是我们如何快速获取当前日期和时间的方法。你也可以将时间戳声明为Double,但我不确定

// 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) 

【讨论】:

【参考方案3】:

不确定您的问题明确暗示了什么,但您通常将时间戳值声明为Double,类似于var timestamp: Double。检索到的数据将类似于 1537187800,并且可以使用以下帮助程序类转换为实际日期和/或时间

class DateAndTimeHelper 

static func convert(timestamp: Double, toDateFormat dateFormat: String) -> String 

        let date = Date(timeIntervalSince1970: timestamp)
        let dateFormatter = DateFormatter()
            dateFormatter.timeZone = NSTimeZone.local
            dateFormatter.locale = NSLocale.current
            dateFormatter.dateFormat = dateFormat

        return dateFormatter.string(from: date)

    


可以使用以下语法

var timestamp: Double = 0.0

// Perform some database querying action in order to retrieve the actual timestamp value from the server
DateAndTimeHelper.convert(timestamp: timestamp, toDateFormat: DATE_FORMAT)

请注意,您应该将 DATE_FORMAT 替换为您想要遵循的格式。可用格式的一个很好的参考可以找到here。

【讨论】:

在 Firestore 中,它将数据类型存储为时间戳,然后在编程中我将变量声明为 Double。如果数据类型不同,如何将数据设置到 Firestore?

以上是关于如何在 ios 中将数据类型声明为时间戳 - swift的主要内容,如果未能解决你的问题,请参考以下文章

Scala - 如何在 Spark SQL 查询中将日期字符串转换为时间戳?

在 Oracle 中将 LONG 转换为时间戳 [重复]

在 Impala 中将连接的字符串转换为时间戳

如何使用firebase-admin在firestore中将日期保存为时间戳?

如何在 Java 中将“HH:MM”格式字符串转换为时间戳?

在scala中将时间字符串转换为时间戳/日期时间