Swift 根据日期显示文本
我试着根据某天来显示某物打开的时间。大概是这样的:Swift 根据日期显示文本,swift,Swift,我试着根据某天来显示某物打开的时间。大概是这样的: Opening Hours **Monday: 8:00-17:00** Tuesday: 8:00-17:00 Wednesday: 8:00-17:00 Thursday: 8:00-17:00 Friday: 8:00-17:00 Saturday: 8:00-13:00 Sunday: closed 或者只是展示 Monday: 8:00-17:00 我的假设是使用switch语句,但是我需要做些什么来确定今天是哪一天?您可以使用
Opening Hours
**Monday: 8:00-17:00**
Tuesday: 8:00-17:00
Wednesday: 8:00-17:00
Thursday: 8:00-17:00
Friday: 8:00-17:00
Saturday: 8:00-13:00
Sunday: closed
或者只是展示
Monday: 8:00-17:00
我的假设是使用switch语句,但是我需要做些什么来确定今天是哪一天?您可以使用从当前日期获取星期几。这看起来像:
let currentDay = NSCalendar.currentCalendar().component(.Weekday, fromDate:NSDate());
根据您获得的当前日期的值,您可以提供正确的营业时间。您可以使用从当前日期开始的一周。这看起来像:
let currentDay = NSCalendar.currentCalendar().component(.Weekday, fromDate:NSDate());
let calendar = NSCalendar.currentCalendar()
let today = calendar.component(.Weekday, fromDate: NSDate())
// Gregorian calendar: sunday = 0, monday = 1, ...
let openingHours: [Int: String] = [1: "Sunday: closed", 2: "Monday: 8:00-17:00", 3: "Tuesday: 8:00-17:00"] // ...
print("Opening hours:\n\(openingHours[today] ?? "")")
/* Opening hours:
Monday: 8:00-17:00 */
根据您获得的当前日期的值,您可以提供正确的营业时间。您可以使用
NSCalendar
将.Weekday
单位作为整数(公历周日到周六为1…7
)
let calendar = NSCalendar.currentCalendar()
let today = calendar.component(.Weekday, fromDate: NSDate())
// Gregorian calendar: sunday = 0, monday = 1, ...
let openingHours: [Int: String] = [1: "Sunday: closed", 2: "Monday: 8:00-17:00", 3: "Tuesday: 8:00-17:00"] // ...
print("Opening hours:\n\(openingHours[today] ?? "")")
/* Opening hours:
Monday: 8:00-17:00 */
如果您知道以Int
表示的一周中的哪一天,而不是使用switch语句,您可以在不同的营业时间使用[Int:String]
字典
let calendar = NSCalendar.currentCalendar()
let today = calendar.component(.Weekday, fromDate: NSDate())
// Gregorian calendar: sunday = 0, monday = 1, ...
let openingHours: [Int: String] = [1: "Sunday: closed", 2: "Monday: 8:00-17:00", 3: "Tuesday: 8:00-17:00"] // ...
print("Opening hours:\n\(openingHours[today] ?? "")")
/* Opening hours:
Monday: 8:00-17:00 */
另一种方法是为
NSDate()
创建一个计算属性扩展,该扩展以字符串的形式返回当前工作日
extension NSDate {
var weekday : String {
let formatter = NSDateFormatter()
formatter.dateFormat = "EEEE"
return formatter.stringFromDate(self)
}
}
这可以很容易地与[String:String]
字典一起使用,用于保存工作日:开放时间的设置:
/* example usage */
let openingHours: [String: String] =
["Sunday": "closed",
"Monday": "8:00-17:00",
"Tuesday": "8:00-17:00"] // ...
let today = NSDate().weekday
print("Opening hours:\n\(today): \(openingHours[today] ?? "")")
/* Opening hours:
Monday: 8:00-17:00 */
您可以使用NSCalendar
将.Weekday
单位作为整数(公历的周日到周六为1…7
)
如果您知道以Int
表示的一周中的哪一天,而不是使用switch语句,您可以在不同的营业时间使用[Int:String]
字典
let calendar = NSCalendar.currentCalendar()
let today = calendar.component(.Weekday, fromDate: NSDate())
// Gregorian calendar: sunday = 0, monday = 1, ...
let openingHours: [Int: String] = [1: "Sunday: closed", 2: "Monday: 8:00-17:00", 3: "Tuesday: 8:00-17:00"] // ...
print("Opening hours:\n\(openingHours[today] ?? "")")
/* Opening hours:
Monday: 8:00-17:00 */
另一种方法是为NSDate()
创建一个计算属性扩展,该扩展以字符串的形式返回当前工作日
extension NSDate {
var weekday : String {
let formatter = NSDateFormatter()
formatter.dateFormat = "EEEE"
return formatter.stringFromDate(self)
}
}
这可以很容易地与[String:String]
字典一起使用,用于保存工作日:开放时间的设置:
/* example usage */
let openingHours: [String: String] =
["Sunday": "closed",
"Monday": "8:00-17:00",
"Tuesday": "8:00-17:00"] // ...
let today = NSDate().weekday
print("Opening hours:\n\(today): \(openingHours[today] ?? "")")
/* Opening hours:
Monday: 8:00-17:00 */
另一个解决办法可以是:
import Foundation
let today = NSDate()
let dateFormatter = NSDateFormatter()
let currentDay = NSCalendar.currentCalendar().component(.Weekday, fromDate:today);
dateFormatter.dateFormat = "EEEE"
let dayOfWeekString = dateFormatter.stringFromDate(today)
switch currentDay
{
case 2,3,4,5:
print("\(dayOfWeekString): 8:00 - 17:00")
case 6:
print("\(dayOfWeekString): 8:00 - 13:00")
default:
print("\(dayOfWeekString): closed")
}
另一个解决办法可以是:
import Foundation
let today = NSDate()
let dateFormatter = NSDateFormatter()
let currentDay = NSCalendar.currentCalendar().component(.Weekday, fromDate:today);
dateFormatter.dateFormat = "EEEE"
let dayOfWeekString = dateFormatter.stringFromDate(today)
switch currentDay
{
case 2,3,4,5:
print("\(dayOfWeekString): 8:00 - 17:00")
case 6:
print("\(dayOfWeekString): 8:00 - 13:00")
default:
print("\(dayOfWeekString): closed")
}
与其使用switch语句,我更喜欢更通用的解决方案。这也是利用元组和类型别名增强代码表达性和可读性的一个很好的演示
typealias Time = (start: Int, end: Int)
// starting with Sunday
let openTimes: [Time] = [(0,0), (9,17), (9,17), (9,17), (9,17), (9,17), (9,12)]
let flags : NSCalendarUnit = [.Hour, .Weekday]
func isOpenAtTime(date: NSDate) -> Bool {
let time = NSCalendar.currentCalendar().components(flags, fromDate: date)
let openingHours = openTimes[time.weekday - 1]
let hour = time.hour
return hour >= openingHours.start && hour <= openingHours.end
}
typealias时间=(开始:Int,结束:Int)
//从星期天开始
让openTimes:[时间]=[(0,0)、(9,17)、(9,17)、(9,17)、(9,17)、(9,17)、(9,17)、(9,17)、(9,12)]
let flags:NSCalendarUnit=[.Hour,.Weekday]
func等电位时间(日期:NSDate)->Bool{
让time=NSCalendar.currentCalendar().components(标志,fromDate:date)
让openingHours=openTimes[time.weekday-1]
让hour=time.hour
return hour>=openingHours.start&&hour与使用switch语句相比,我更喜欢更通用的解决方案。这也是利用元组和类型别名增强代码表达性和可读性的一个很好的演示
typealias Time = (start: Int, end: Int)
// starting with Sunday
let openTimes: [Time] = [(0,0), (9,17), (9,17), (9,17), (9,17), (9,17), (9,12)]
let flags : NSCalendarUnit = [.Hour, .Weekday]
func isOpenAtTime(date: NSDate) -> Bool {
let time = NSCalendar.currentCalendar().components(flags, fromDate: date)
let openingHours = openTimes[time.weekday - 1]
let hour = time.hour
return hour >= openingHours.start && hour <= openingHours.end
}
typealias时间=(开始:Int,结束:Int)
//从星期天开始
让openTimes:[时间]=[(0,0)、(9,17)、(9,17)、(9,17)、(9,17)、(9,17)、(9,17)、(9,17)、(9,12)]
let flags:NSCalendarUnit=[.Hour,.Weekday]
func等电位时间(日期:NSDate)->Bool{
让time=NSCalendar.currentCalendar().components(标志,fromDate:date)
让openingHours=openTimes[time.weekday-1]
让hour=time.hour
return hour>=openingHours.start&&hour