我在这个格式的字符串中有一个日期" 2017-03-14" (yyyy-MM-dd)我正在尝试将其转换为具有此格式的字符串" 2017年3月14日星期二"。
这是我的代码:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let date = dateFormatter.date(from: "2017-03-14")
现在如果我打印" date"的值,我得到这个:
2017-03-13 22:00:00 +0000
这就是前一天。那是为什么?
编辑:
我需要在格式化之前比较日期。
var newDateString : String = ""
let date2 = Date()
let comp = date2.compare(date!)
if comp.rawValue == 0 {
newDateString = "TONIGHT"
} else {
dateFormatter.dateFormat = "EEEE, MMMM d, yyyy"
newDateString = dateFormatter.string(from: date!)
}
由于
答案 0 :(得分:3)
所需的格式应为:
EEEE,MMMM dd,yyyy
您只需在代码后面添加以下代码段:
<?php $page = $_SERVER['REQUEST_URI'];
if($page == "/") {
?>
<!-- Metadata for home -->
?>
注:
我建议使用可选绑定来声明dateFormatter.dateFormat = "EEEE, MMMM dd, yyyy"
let string = dateFormatter.string(from: date!) // "Tuesday, March 14, 2017"
,如下所示:
date
答案 1 :(得分:2)
您的困惑是基于对时间和日期的误解。显然,您目前位于比UTC(协调世界时)早2小时的时区,此前称为格林威治标准时间(GMT)。
当您向操作系统询问转换自&#34; 2017-03-14&#34;的Date对象时你得到2017-03-14上午午夜的日期/时间参考 在你的时区 ,这是正确的,晚上10点(22:00)然后在UTC前一天晚上。
当您向操作系统询问现在的日期对象Date()
时,您会得到 现在 的日期/时间参考在你的时区,这将是UTC的两个小时。
准确评估您的日期字符串,以便在2017-03-14&#39;&#34;&#34;&#39;&#39;&#39;&#39;&#39;你可能想转换自&#34; 2017-03-14 23:59&#34; (或者晚上11点59分,或者也许是今晚8点开始之前的事件,等等)。
这将进行原始比较,但作为一种功能会更好(虽然我不确定你想如何使用它)......
var newDateString : String = ""
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm"
// set tonightDate to 1 minute before midnight, tonight, in local time
if let tonightDate = dateFormatter.date(from: "2017-03-14 23:59") {
// set nowDate to current local time
let nowDate = Date()
let comp = nowDate.compare(tonightDate)
if comp.rawValue <= 0 {
newDateString = "TONIGHT"
} else {
dateFormatter.dateFormat = "EEEE, MMMM d, yyyy"
newDateString = dateFormatter.string(from: tonightDate)
}
}
print(newDateString)
答案 2 :(得分:1)
这是根据UTC计算的时间,所以你要前一天。你可以使用下面的代码获得正确的格式:
func chageDateFormat(date:String) -> String{
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
guard let date = dateFormatter.dateFromString(date) else {
assert(false, "No date from string")
return ""
}
print(date)
dateFormatter.dateFormat = "EEEE, dd MMMM, yyyy"
let result = dateFormatter.stringFromDate(date)
return result
}
let resultFormateDate = chageDateFormat("2017-03-14")
为了进行比较,您还需要将Date()
转换为正确的格式。两个日期必须采用相同的格式。
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let date = NSDate()
let strdate = dateFormatter.stringFromDate(date)
let resultFormateDate2 = chageDateFormat(strdate)
现在你可以比较两个字符串
if resultFormateDate == resultFormateDate2{
print("True")
}