perl6 – 在Perl 6中,所有Instants都是可比较的还是机器相关的?
这是我可以找到定义的情况,但我不太了解它.从
official documentation:
我不明白如何在没有时代的情况下指定特定时刻?它没有参考点吗?在两台不同的Linux机器上,似乎两个Instants都提到自POSIX Epoch以来的几秒钟.我的猜测是Instants确实有一个有效的开始时间,但是开始时间是依赖于实现/设备的. # machine1 say(now * (1/3600) * (1/24) * (1/365.25)); # years from zero point 46.0748226200715 # machine2 say(now * (1/3600) * (1/24) * (1/365.25)); # years from zero point 46.0748712024946 无论如何,我的问题是,可以依赖Instants在不同进程之间保持一致,还是只用于“内部”使用? 解决方法
当前在特定计算机上的所有Instant对象都是可比较的,来自不同计算机的Instants可能不是.
出于实用目的,在POSIX机器上,它目前基于自1970年1月1日以来的秒数,根据International?Atomic?Time (TAI),现在是Coordinated?Universal?Time (UTC)之前的36 seconds. 在另一个系统上,它可能更有意义,它基于打开机器后的时间量. 如果要比较来自不同计算机的Instants,或将它们存储起来供以后使用,请将其转换为标准化值. 您可以使用几种内置转换器 # runtime constant-like term my init = INIT now; say init.to-posix.perl; # (1454172565.36938,Bool::False) say init.DateTime.Str; # now.DateTime =~= DateTime.now # 2016-01-30T16:49:25.369380Z say init.Date.Str; # now.Date =~= Date.today # 2016-01-30 say init.DateTime.yyyy-mm-dd eq init.Date.Str; # True 如果你需要比上面显示的更多,我建议你只使用DateTime对象,因为它有各种有用的方法. my $now = DateTime.now; say $now.Str; # 2016-01-30T11:29:14.928520-06:00 say $now.truncated-to('day').utc.Str; # 2016-01-30T06:00:00Z # ^ say $now.utc.truncated-to('day').Str; # 2016-01-30T00:00:00Z # ^ Date.today和DateTime.now会考虑您当地的时区信息,而now.Date和now.DateTime则不能. 如果你真的只想处理POSIX时间,你可以使用与now.to-posix [0] .Int大致相同的时间. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |