Swift 3 - Android 相当于使用日历过去 12 个月 Class

Swift 3 - Android Equivalent Of Getting Past 12 Months Using Calendar Class

Android 中,我能够为过去 12 个月(包括本月)的折线图生成标签。

在我的 TimeDateHelper class:

public static DateFormat getMonthYearChartLabelFormat() {
    DateFormat monthYearChartLabelFormat = new SimpleDateFormat("MMM ''yy", Locale.US);
    monthYearChartLabelFormat.setTimeZone(TimeZone.getDefault());
    return monthYearChartLabelFormat;
}

在我的另一个LineChartActivity class:

private void setUpMonthLabels() {
    this.labels = new ArrayList<>();
    Calendar cal = Calendar.getInstance();
    cal.setTimeZone(TimeZone.getDefault());
    cal.add(Calendar.MONTH, -11);
    for (int i = 0; i < 12; i++) {
        this.labels.add(TimeDateHelper.getMonthYearChartLabelFormat().format(cal.getTime()));
        cal.add(Calendar.MONTH, 1);
    }
}

Swift 3Calendar class 中的 enumerateDates 方法太混乱了。我不知道是用那个还是别的什么。我想要的只是过去 12 个月,包括本月。例如,这个月是十二月,所以输出将是:

Jan '16
Feb '16
Mar '16
Apr '16
May '16
Jun '16
Jul '16
Aug '16
Sep '16
Oct '16
Nov '16
Dec '16

如何使用 Swift 3 完成此操作?

**** 进度 ****

到目前为止,我已经设置了一些格式:

let dateFormatter: DateFormatter = {
    let formatter = DateFormatter()
    formatter.timeZone = TimeZone.current
    return formatter
}()

func getMonthYearChartLabelString(fromDate date: Date) -> String {
    dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "MMM ''yy", options: 0, locale: Locale(identifier: "en-US"))
    return dateFormatter.string(from: date)
}

撇号由于某种原因不起作用(例如,它显示 Dec 16 而它应该显示 Dec '16)。

这是我的第一次尝试。

import Foundation

var past12Months: [String] {
    let today = Date()
    let dates = (-12...0).flatMap{ Calendar.current.date(byAdding: .month, value: [=10=], to: today)}

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MMM ''yy"

    let strings = dates.map{ dateFormatter.string(from: [=10=])! } //TODO: add error handling here
    return strings
}

print(past12Months)

您可以使用日历获取最近 12 个月月+年值的数组。 这是 Swift 3 相当于你在 Android:

中所做的
 let cal = Calendar.current
    var date = cal.startOfDay(for: Date())
    var lables = [String]()
    let dateFormatter: DateFormatter = DateFormatter()

    let months = dateFormatter.shortMonthSymbols

    for i in 1 ... 12 {
        let  mon =  cal.component(.month, from: date)
        let month = months?[mon-1] //as! String // month - from your date components
        let year = String(cal.component(Calendar.Component.yearForWeekOfYear, from: date))
        let index1 = year.index(year.endIndex, offsetBy: -2)
        let strDate =  month!  + " '" + year.substring(from: index1);
        lables.append(strDate)
        date = cal.date(byAdding: .month, value: -1, to: date)!
    }
    print(lables)

您将在标签数组中获得所需的值