首先,我意识到time with time zone不推荐.我将使用它,因为我将多个time with time zone值与当前系统时间进行比较,无论白天如何.即,用户说每天从08:00开始,并在12:00时使用他们的时区,而不是系统时区.所以,我time without time zone在一个表中有一个列,让我们调用它SCHEDULES.time,我在另一个表中有一个UNIX时区名称列,让我们调用它USERS.tz.
我的系统时区是'America/Regina',它不使用DST,因此偏移始终是-06.
鉴于时间为'12:00:00'和tz为'America/Vancouver',我想将数据选择为类型列time with time zone但我不想将时间转换为我的时区,因为用户有效说从温哥华的12:00开始,而不是里贾纳.
因此,做:
SELECT SCHEDULES.time AT TIME ZONE USERS.tz
FROM SCHEDULES JOIN USERS on USERS.ID=SCHEDULES.USERID;
Run Code Online (Sandbox Code Playgroud)
结果(目前):
'10:00:00-08'
Run Code Online (Sandbox Code Playgroud)
但我真的想要:
'12:00:00-08'
Run Code Online (Sandbox Code Playgroud)
我找不到任何有关将时区应用到时间的文档,除此之外AT TIME ZONE.有没有办法在没有角色操纵或其他黑客的情况下实现这一目标?
更新: 这可以通过使用字符串连接,强制转换和Postgres时区视图来完成:
select ('12:00:00'::text || utc_offset::text)::timetz
from pg_timezone_names
where name = 'America/Vancouver';
Run Code Online (Sandbox Code Playgroud)
但是,这相当慢.必须有更好的方法,不是吗?
更新2:
我为这种困惑道歉.该SCHEDULES表不使用time with time zone,我想选择一个time with time …
我有一个viewModel,带有一个带有可观察变量的observableArray对象.
我的模板使用编辑按钮显示数据,该按钮隐藏显示元素并显示带有值的输入元素.您可以开始编辑数据,然后您可以选择取消.我希望这个取消恢复到对象的未更改版本.
我尝试通过这样做来克隆对象:
viewModel.tempContact = jQuery.extend({}, contact);
Run Code Online (Sandbox Code Playgroud)
要么
viewModel.tempContact = jQuery.extend(true, {}, contact);
Run Code Online (Sandbox Code Playgroud)
但是一旦联系人,viewModel.tempContact就会被修改.
是否有任何内置于KnockoutJS来处理这种情况,或者我最好只是创建一个具有完全相同细节的新联系人,并在取消时用新联系人替换修改后的联系人?
任何意见是极大的赞赏.谢谢!