将字符串转换为前一天返回的日期

时间:2017-03-14 13:04:08

标签: swift nsdate nsdateformatter

我在这个格式的字符串中有一个日期" 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!)
}

由于

3 个答案:

答案 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")
}