我需要创建一个函数,用于根据ISO周系统计算swift中给定年份的周数(ISO8601)。我需要的号码作为一个国际。首先,我想我需要做一个NSDate为12月31日,只是问什么星期,这是在,然后我意识到有时12月31日是在第二年的第一周(例如2014年12月31日)有人知道这样做的方法吗?
我试过了
var calendarr = NSCalendar(calendarIdentifier: NSCalendar.Identifier.ISO8601)!
var monday = "01-01-2005"
var dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
var datumet = dateFormatter.date(from: monday)
var weekRange = calendarr.range(of: .weekOfYear, in: .year, for: datumet!)
var weeksCount = weekRange.length
print("this many weeks", weeksCount)
但不管我放进哪一年,它都给了我53周。作为参考,2004年有53周,2005年有52周
3条答案
按热度按时间u3r8eeie1#
在Long and Short ISO Calendar Years中可以找到一个简单的公式来确定ISO日历中一年的周数:
如果满足以下条件,则ISO日历年y较长(包含53周):
或者如果:
与:
请注意维基百科中的版本:周每年似乎有一个小错误,"如果p(年)= 5"应该是"如果p(年)= 4"。
这是Swift中的一个实现:
试验:
这与维基百科文章中给出的列表一致。
此外,1月1日可能属于 * 前 * ISO年(例如2016年)。选择给定年份的1月4日至12月28日之间的任何一天都可以解决这个问题。
进一步简化后,给出以下方法(基于Kevin Sabbe's approach):
其产生与上述函数相同的结果。
lf5gs5x22#
为Swift工作3:
您必须在Date()中指定年份,它将为您提供全年的周数。
希望能有所帮助!
omjgkv6w3#