ios 如何在SwiftUI中更改DatePicker的时区

bfrts1fy  于 2023-02-01  发布在  iOS
关注(0)|答案(1)|浏览(233)

我正在尝试为预订系统制作一个移动的应用程序。用户可以从不同时区预订产品。因此,当纽约市的用户尝试从巴黎预订产品时,我需要确保用户选择了欧洲/巴黎时区的时间。目前swiftUI日期选择器使用系统当前时区,当然是GMT-5,因此当他们选择13:00时,Date()对象将自己设置为18:00 UTC,但我需要在GMT+1中选择他/她,因此当他们选择13:00时,我应将Date()对象设置为12:00 UTC。我尝试过使用时区的环境值,但它会更改整个应用程序的时区,我只需要更改日期选择器的时区,而不是所有应用程序。以下是我尝试更改时区的解决方案

DatePicker("", selection: $viewModel.tripRequest.date, displayedComponents: .hourAndMinute)
                    .labelsHidden()
                    .padding(.horizontal)
                    .font(.custom("Gilroy-Regular", size: 36))
                    .cornerRadius(15)
                    .environment(\.timeZone, TimeZone(secondsFromGMT: 3600)!)

我也试过用内省但没成功

DatePicker("", selection: $viewModel.tripRequest.date, displayedComponents: .hourAndMinute)
                    .labelsHidden()
                    .padding(.horizontal)
                    .font(.custom("Gilroy-Regular", size: 36))
                    .cornerRadius(15)
                    .introspectDatePicker { datePicker in
                        datePicker.timeZone = TimeZone(secondsFromGMT: 3600)
                    }
7gcisfzg

7gcisfzg1#

默认情况下,SwiftUI的DatePicker使用设备的Timezone
可以使用.environment(\.timeZone, TimeZone(identifier: "Specific identifier")!)指定Timezone
但是Date是UTC,所以如果用户在一个时区选择了一个日期,而在另一个时区查看它,它将被调整。

import SwiftUI

struct WorldTimeView: View {
    @State private var date: Date = .init()
    var body: some View {
        VStack{
            
            DatePicker("US", selection: $date, displayedComponents: .hourAndMinute)
            //US Date Picker
                .environment(\.timeZone, TimeZone(identifier: "America/New_York")!)
           
            
            DatePicker("Paris", selection: $date, displayedComponents: .hourAndMinute)
            //Paris Date Picker
                .environment(\.timeZone, TimeZone(abbreviation: "CET")!)
            
            //User/Device Date Picker
            DatePicker("Local", selection: $date, displayedComponents: .hourAndMinute)
        }
    }
}

struct WorldTimeView_Previews: PreviewProvider {
    static var previews: some View {
        WorldTimeView()
    }
}

相关问题