时间和日期计算

时间:2019-10-23 05:53:58

标签: swift nsdateformatter

使用日期格式“ EEEE:dd:MMM:HH:mm”返回正确的日期和时间,但是星期几不正确。例如,以7.5节的速度进行750海里的航行将花费100个小时。如果我使用代码以11月1日(星期五)的12:00作为开始时间计算到达时间,则它将返回11月5日(星期日)的16:00。时间和日期正确,但星期几不正确。应该是星期二。

 @IBAction func Calculate(_ sender: UIButton) {


    let userCalendar = Calendar.current

    let dateMakerFormatter = DateFormatter()

    dateMakerFormatter.dateFormat = "EEEE:dd:MMM:HH:mm"

    let distance = (Distance.text! as NSString).floatValue
    let speed = (GndSpd.text! as NSString).floatValue

    let calcDT = ((distance / speed) * 3600)


    if var date = dateMakerFormatter.date(from: (DTG.text!)) {
        date = dateMakerFormatter.date(from: (DTG.text!))!


        var timeAdj = DateComponents()
        timeAdj.second = Int(calcDT)

    if var adj = userCalendar.date(byAdding: timeAdj, to: date) {
        adj = userCalendar.date(byAdding: timeAdj, to: date)!

        CalcDTG.text = dateMakerFormatter.string(from: adj)

        }

    }
}

2 个答案:

答案 0 :(得分:0)

您应将d用于“天”,而不是D

 dateMakerFormatter.dateFormat = "EEEE:dd:MMM:HH:mm"

DateFormatter

答案 1 :(得分:0)

如果您不指定年份,则不能说星期几不正确。

日期格式化程序似乎在创建日期时忽略星期几:

let dateMakerFormatter = DateFormatter()
dateMakerFormatter.dateFormat = "EEEE:dd:MMM:HH:mm" 
let date = dateMakerFormatter.date(from: "Friday:01:Nov:12:00")!
print(date) -> 2000-11-01 12:00:00 +0000    
print(dateMakerFormatter.string(from: date)) -> Wednesday:01:Nov:12:00

嘿,请问您现在是2000年,11月5日确实是在星期日。 您需要获得的重要信息是,永远不要,永远,永远不要使用字符串来传递代码中的日期值。使用Date。如果要从API响应中获取日期,请将其更改为摄取日期。如果您从用户输入中获取一个,请使用日期选择器或其他控件。如果您是从用户输入的字符串中获取一个,则建议您为自己做一些不必要的工作,但请务必填写用户未提供的所有详细信息。