小编asi*_*ibs的帖子

如何在Java 7中获得国际原子时

我正在研究Java7项目,我们需要一个国际原子时间的时间戳.我发现了一些与此相关的问题,指向JSR-310和ThreeTen Project(正在实现JSR-310):

如何在Java中获得GPS时间和TAI时间?

http://www.coderanch.com/t/549178/java/java/TAI-Atomic-Time-International

但是,我正在努力研究用于Java 7的确切内容以及从何处获取它.似乎有ThreeTen的旧SourceForge和GitHub页面,以及OpenJDK页面.

我找到了Java 7反向端口,但是从Maven下载后它不包含TAIInstant类,这是我真正需要的(TIAInstant类列在ThreeTen SourceForge JavaDoc上,位于javax.time.TAIInstant下).

为了完整起见,这是我的pom.xml的摘录:

<dependency>
  <groupId>org.threeten</groupId>
  <artifactId>threetenbp</artifactId>
  <version>0.8.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我应该使用其他东西,我应该从哪里获取它?

注意:抱歉,我无法提供指向我所指的所有页面的链接,StackOverflow不会让每个帖子都有> 2个链接而没有更高的代表.

[编辑] 想要TAI的原因是我需要一个单调增加的时间戳,我相信TAI会满足(即使在正和负闰秒期间,因为它不关心闰秒计算所有秒数,包括飞跃秒).

从各种来源阅读了关于POSIX/Unix的时间后,我仍然不清楚在闰秒的Unix时间内发生了什么.我知道Unix时间在引用UTC时间方面是模棱两可的,但我不清楚在闰秒发生的瞬间Unix时间会发生什么?Unix时间'暂停'还是倒退例如?也许更重要的是,即使它不应该根据Unix时间规范,Unix实现是否真的遵守关于闰秒的规范......?

最后,我是否正确地说System.currentTimeMillis()将获得相当于POSIX时间(虽然以毫秒而不是秒)?

注意,我需要一个可以在JVM和机器上移植的对象(排除System.nanoTime()或类似的东西).

[结论]

TAI
TAI是一个测量时间的系统,每秒计算一次并且"所有秒都相等" - 即.每秒包含相同的时间段,所有秒数(包括闰秒)都计入总数中.这意味着TAI中的秒数(从某个任意起始点开始计算,例如Unix Epoch)是一个单调递增的整数.

POSIX时间
POSIX时间是用于测量时间的标准(不是实现).它将每天定义为恰好有86400秒.因此,POSIX时间不计算闰秒(因为偶尔一分钟可能有61秒,导致天数> 86400秒,理论上一分钟可能有59秒,导致天数<86400秒).这意味着POSIX中的'秒'具有可变长度,并且在闰秒之前/期间/之后不久,POSIX时钟可以跳过秒或重复它们.具体来说,Meno Hochschild在其答案中引用的POSIX规范指出,"实际时间与自大纪元以来秒的当前值之间的关系尚未明确."

UTC
UTC是一个时间标准,它与地球绕太阳运行的方式有关,旨在维持太阳位置与一天中的时间(在一个阈值内)之间的关系.即在地球的UTC + 0区域,太阳总是在UTC时间中午处于最高点.闰秒(正面或负面)是必要的,因为地球自转的速度不固定,并且它不会以可预测的方式变化(意味着我们无法预测何时需要闰秒 - 或者它们是否为正闰秒或负闰秒)

代表时代
在我看来,TAI和POSIX都代表"秒数"(即计算机实际存储容易的东西),而UTC是时间的"人类解释"(即年/月/日)小时:分钟:秒.毫秒)通常不会由计算机内部存储.

翻译时间
鉴于上述情况,有许多问题从POSIX(没有任何闰秒计算)转换为TAI(计算闰秒):

  1. 它需要保持闰秒的表/计数以将任何POSIX时间转换为TAI时间
  2. 即使第1点被解决,上面的POSIX Spec也不保证闰秒期间会发生什么,所以在这种情况下我们无法准确地表示明确的时间
  3. 如果许多系统必须通信,在它们之间传递时间戳,我们必须保证闰秒的表/计数保持一致

另一方面,很容易从POSIX转换为UTC'人类解释'.它不需要知道闰秒,因为它只假设每天都有相同的秒数(虽然这些'秒'中的一些实际上有不同的时间长度).实际上,您只需使用POSIX Spec中的公式的倒数来获得各种UTC时间分量(再次参见Meno Hochschild引用的POSIX规范).

java time java-7 java-time tai-time

6
推荐指数
2
解决办法
2110
查看次数

Ansible - 为多个用户和角色管理多个SSH密钥

问题

我正在使用Ansible管理许多不同的服务器.每个服务器上有多个Linux用户,如readonly,admin等.

我的Ansible项目中还有一些文件,其中包含特定人群的所有SSH密钥 - 例如.AppDevelopersPublicKeys,DbaPublicKeys等等.

不同的人群在不同的服务器上具有不同的访问级别.例如.在WebServer上,AppDevelopers具有管理员访问权限,而DBA可能只具有读取权限.在数据库服务器上,反之亦然.

为了实现上述目标,我有不同类型的服务器的不同Ansible角色(例如WebAppServer,DatabaseServer等).然后,这些角色具有变量readonly_key_filesadmin_key_files针对它们进行设置,列出了应该具有只读和管理访问权限的角色的相应密钥文件.

理想的解决方案是:

  1. 确保公钥是独一无二的 - 例如.如果从AppDeveloperPublicKeysAnsible文件中删除公钥,服务器也会删除此密钥
  2. 当实际发生了变化时,只上传/更改服务器上的文件
  3. 使用--diff选项运行Ansible 时显示文件的准确差异

我正在使用Ansible 2.2.0.0

迄今已尝试解决方案

以下所有内容均不符合我的要求:

authorized_key with_file

- authorized_key: user=readonly exclusive=no key={{item}}
  with_file: {{readonly_key_files}}
Run Code Online (Sandbox Code Playgroud)
  • 这不符合要求1,因为它循环遍历多个文件,因此exclusive必须设置为no

authorized_key与事实

解决方案按照https://github.com/ansible/ansible-modules-core/pull/4167/files

- name: "Generate developer keys from multiple files"
  set_fact: dev_key_list="{{ lookup('file', item) }}"
  register: dev_keys
  with_items: '{{developer_key_files}}'

- name: "Merge developer keys into single list"
  set_fact: …
Run Code Online (Sandbox Code Playgroud)

ssh ssh-keys ansible ansible-2.x

6
推荐指数
1
解决办法
2339
查看次数

Rails ActiveRecord:已回滚保存嵌套模型

使用 Rails 5:

gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
Run Code Online (Sandbox Code Playgroud)

我已经创建了我能想到的最简单的例子来演示这个问题:

父母.rb

class Parent < ApplicationRecord
  has_many :children
  accepts_nested_attributes_for :children
end
Run Code Online (Sandbox Code Playgroud)

孩子.rb

class Child < ApplicationRecord
  belongs_to :parent
end
Run Code Online (Sandbox Code Playgroud)

创建父项,保存,创建子项,保存(有效)

使用rails console,创建一个新的父级,然后保存,然后从父级构建一个子级,然后保存父级,工作正常:

irb(main):004:0> parent = Parent.new
=> #<Parent id: nil, created_at: nil, updated_at: nil>
irb(main):005:0> parent.save
   (0.5ms)  BEGIN
  SQL (0.4ms)  INSERT INTO `parents` (`created_at`, `updated_at`) VALUES ('2016-09-25 13:05:44', '2016-09-25 13:05:44')
   (3.2ms)  COMMIT
=> true
irb(main):006:0> parent.children.build
=> #<Child id: nil, parent_id: 1, created_at: nil, updated_at: nil>
irb(main):007:0> parent.save
   (0.5ms) …
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails ruby-on-rails-5

2
推荐指数
1
解决办法
1680
查看次数