我的问题与Get "time with time zone" from "time without time zone" and the time zone name非常相似(我认为)。我只想在Swift中做到这一点。
无论如何,我正在尝试使用以下签名编写一个函数:
func combine(_ date: Date, with timeZone: TimeZone) -> Date?
它的作用是它基本上采用日期并返回“分区”日期。如果时区中不存在日期,则返回nil
。
为避免成为XY问题,请点击此处截图:
我要求用户提供日期和时区,我想将这两者合并为一个Date
。
我会尽力解释。我将以timeIntervalFrom1970
的格式表达日期,以使其尽可能清晰。
假设我将0作为日期传递,GMT-1作为时区传递,它将返回3600. 0是1970-1-1 00:00:00。 GMT-1的1970-1-1 00:00:00是GMT的1970-1-1 01:00:00,即3600。
这就是我试图实现这个的方法:
return date.addingTimeInterval(-timeZone.secondsFromGMT(for: date))
这似乎最有效,但不是全部。但是,如果DST涉及并且整个事情变得混乱,我认为它不会返回正确的结果。它也感觉“数学是”。我更喜欢没有数学的方法,只使用Foundation API方法。
那么,如何实施此方法?
答案 0 :(得分:1)
在您的示例中,API会为您提供using System.ComponentModel;
using System.Windows.Forms;
using System.Windows.Forms.Design;
[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ContextMenuStrip)]
public class ToolStripTreeView : ToolStripControlHost
{
[DesignerSerializationVisibility( DesignerSerializationVisibility.Content)]
public TreeView TreeViewControl { get { return (TreeView)Control; } }
public ToolStripTreeView() : base(CreateControl()) { }
private static TreeView CreateControl()
{
var t = new TreeView();
return t;
}
}
,但您想解释
在某个特定时区内的“2017/08/18 8:08”。假如说
eureka表单UI元素使用当前日历的时区
要显示,您可以将日期转换为Date
,然后再返回
到具有不同时区的DateComponents
。
Date
如果日/时间组合不存在,将返回 func combine(_ date: Date, with timeZone: TimeZone) -> Date? {
var cal = Calendar.current
let comp = cal.dateComponents([.era, .year, .month, .day, .hour, .minute, .second], from: date)
cal.timeZone = timeZone
return cal.date(from: comp)
}
在另一个时区。