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 3
的 Calendar
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)
您将在标签数组中获得所需的值
在 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 3
的 Calendar
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)
您将在标签数组中获得所需的值