我正在一个列出不同项目位置的项目上,每个项目位置都与不同的时区相关联。我正在使用FSCalendar在其时区中显示当前所选项目的日期。我无法在FSCalendar View上正确显示日期。

我想在FSCalendar视图上显示日期,而不管设备中配置的时区如何。这意味着,即使用户手动更改了时区以转到设备中的设置,此更改也不会影响我的项目日历。 (例如:通常会在所有设备中选择自动时区)

为此,我必须使用选定的项目时区配置FSCalendar。

我尝试使用DateFormatter()将Date()转换为Project时区。
尝试过DST计算。

  func isDateInProjectTimeZone() -> Bool {
       if let projectTimeZone = AppUtils.timeZoneForProject() {
           let dateFormatter = DateFormatter()
           dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"

           var calendar = Calendar.current
           calendar.timeZone = projectTimeZone

           return calendar.isDateInToday(Date().dateInProjectTimeZone())
       }
       return false
  }

最佳答案

我可以使用FSCalendar通过以下步骤满足我的要求,如果有人遇到相同的情况,答案可能会有用。

要更改FSCalendar时区,请按照以下步骤操作:


创建FSCalendar的自定义类,并编写所需的初始化方法,如下所示。

import FSCalendar

class XYZFSCalendar: FSCalendar {

   override init(frame: CGRect) {
      super.init(frame: frame)
   }

   required init?(coder aDecoder: NSCoder) {

       super.init(coder: aDecoder)

       if let projectTimeZone = <Set_Your_Time_Zone_Here> {
          self.setValue(projectTimeZone, forKey: "timeZone")
          self.perform(Selector(("invalidateDateTools")))
       }
   }
}

上面的代码使FSCalendar与系统时间无关
将故事板中的上述自定义日历分配为FSCalendar的自定义类
如果您将任何日期分配给日历


例如:

import FSCalendar

class ViewController: UIVIewController {
    @IBOutlet weak var calendar: XYZFSCalendar!

    override func viewDidLoad() {
       super.viewDidLoad()

       //When you set the date below, the date will be displayed in the FSCalendar based on your custom timezone.
       calendar.select = Date()

    }
}


这对我的情况有所帮助,希望对希望的人也有所帮助。 timeZone可能不会全局更改,但是每次您使用针对FSCalendar的预设timeZone实例化该类时,它都会起作用。

谢谢。

关于ios - 在项目中全局更改FSCalendar的时区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58523548/

10-11 21:34