Swift 3 - 使用日历类获得过去12个月的Android等效
问题描述:
在Android
中,我可以生成包括本月在内的过去12个月的线形图标签。Swift 3 - 使用日历类获得过去12个月的Android等效
在我TimeDateHelper
类:
public static DateFormat getMonthYearChartLabelFormat() {
DateFormat monthYearChartLabelFormat = new SimpleDateFormat("MMM ''yy", Locale.US);
monthYearChartLabelFormat.setTimeZone(TimeZone.getDefault());
return monthYearChartLabelFormat;
}
在我的其他LineChartActivity
类:
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);
}
}
的enumerateDates
方法Swift 3
的Calendar
类是太混乱。我不知道是否使用那个或别的东西。我想要的是包括本月在内的过去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
我怎样才能得到这与雨燕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)
}
撇号不会因为某些原因寿工作(当然它显示十二月16时它应该显示十二月'16)。
答
这是我第一次刺伤它。
import Foundation
var past12Months: [String] {
let today = Date()
let dates = (-12...0).flatMap{ Calendar.current.date(byAdding: .month, value: $0, to: today)}
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM ''yy"
let strings = dates.map{ dateFormatter.string(from: $0)! } //TODO: add error handling here
return strings
}
print(past12Months)
答
您可以使用日历来获取过去12个月的数组+月份+年份值。 这里是斯威夫特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)
您将获得所需的标签数组值
你想输出字符串或日期对象? – Alexander
字符串,我将编辑帖子到目前为止我已经输入的格式 – Rafi