从datepicker获取日期与不同的时区

时间:2018-04-26 09:49:46

标签: ios swift uidatepicker

我使用标准的DatePicker并在其上打印日期。 出于某种原因,我的日期选择器将其时区设置为IST,这可能是因为语言环境。

让我们举个例子:

  

DatePicker - > 12:00 PM日期读取 - > 06:30:00 +0000

这是正确的,因为日期将打印 UTC 时间, IST UTC + 5:30

现在,当我更改DatePicker的时区时,请告诉伦敦 GMT + 1

  

DatePicker - > 12:00 PM日期读取 - > 06:30:00 +0000

日期应该在11:00:00实际读取

我如何更改DatePicker的时区:

public enum StateEnum {
      Ok = 1,
      Fail = 2
}

public partial class Foo
{
    public int Id { get; set; }
    public int StateId { get; set; }
    public StateEnum State
    {
        get => (StateEnum)StateId;
        set => StateId = (int)value;
    }
}

1 个答案:

答案 0 :(得分:0)

我之前有过同样的问题,但另一个原因。试试这个希望它会有所帮助。

首先 -

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
var startDate = dateFormatter.string(from: yourdatepicker.date)
startDate = localToUTC(date: startDate)

其次我们将其转换为本地UTC,这里我们提到TimeZone到系统时间

func localToUTC(date:String) -> String {

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = NSTimeZone.system
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dt = dateFormatter.date(from: date)
return dateFormatter.string(from: dt!)
}

如果您想将UTC转换为当地时间

,请参阅第三步
func UTCToLocal(date:String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let dt = dateFormatter.date(from: date)
dateFormatter.timeZone = NSTimeZone.system
dateFormatter.dateFormat = "hh:mm a"
return dateFormatter.string(from: dt!)
 }