【问题标题】:Time and Date Calculations时间和日期计算
【发布时间】:2025-12-26 11:45:11
【问题描述】:

使用日期格式“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)

        }

    }
}

【问题讨论】:

  • 日期是d,而不是D。日期格式说明符中的大小写很重要。
  • 您需要使用实际输入、实际结果和预期结果来更新您的问题。
  • 以 7.5 节的速度行驶 750 海里就是 360,000 秒。即四天零四个小时。如果我使用代码将其添加到 11 月 1 日星期五 12:00,它应该会在 11 月 5 日星期二 16:00 返回。它实际上在 11 月 5 日星期日 16:00 返回。星期几不正确
  • 请注明此问题已解决。然后将包含所有相关详细信息的新问题发布到您的新问题中。

标签: swift nsdateformatter


【解决方案1】:

您应该使用 d 表示 Day,而不是 D

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

DateFormatter

【讨论】:

  • 百万谢谢!当你知道怎么做的时候就这么简单。程序现在运行良好。
  • 此代码现在返回正确的日期和时间,但月份中的日期不正确。例如,以 7.5 节的速度行驶 750 海里的距离是 100 小时,即四天零四个小时。如果我在 11 月 1 日星期五 12:00 运行代码,它将返回 11 月 5 日星期日 16:00。应该是周二吧?日期和时间正确。
【解决方案2】:

当您不给出年份时,您不能说星期几是不正确的。

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

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 响应中获取日期,请将其更改为摄取日期。如果您从用户输入中获取一个,请使用日期选择器或其他控件。如果您从用户输入的字符串中得到一个,我会礼貌地建议您自己做一些不必要的工作,但请确保您填写了用户未提供给您的所有详细信息。

【讨论】:

  • 谢谢。包含年份已解决此问题。
最近更新 更多