我正在尝试将日期时间管理的各种代码混合清理到只有Java 8 java.time命名空间.现在我有一个小问题,默认DateTimeFormatter为Instant.该DateTimeFormatter.ISO_INSTANT格式只能说明毫秒时,他们不等于零.
时代被渲染为1970-01-01T00:00:00Z而不是1970-01-01T00:00:00.000Z.
我做了一个单元测试来解释这个问题以及我们需要如何将最终日期相互比较.
@Test
public void java8Date() {
DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT;
String epoch, almostEpoch, afterEpoch;
{ // before epoch
java.time.Instant instant = java.time.Instant.ofEpochMilli(-1);
almostEpoch = formatter.format(instant);
assertEquals("1969-12-31T23:59:59.999Z", almostEpoch );
}
{ // epoch
java.time.Instant instant = java.time.Instant.ofEpochMilli(0);
epoch = formatter.format(instant);
// This fails, I get 1970-01-01T00:00:00Z instead
assertEquals("1970-01-01T00:00:00.000Z", epoch );
}
{ // after epoch
java.time.Instant instant = java.time.Instant.ofEpochMilli(1);
afterEpoch = formatter.format(instant);
assertEquals("1970-01-01T00:00:00.001Z", afterEpoch );
} …Run Code Online (Sandbox Code Playgroud) 我需要在 chrome 扩展中显示一个弹出窗口。目前,当单击扩展图标时,弹出窗口显示在新窗口中。
我需要的是,当我单击扩展程序时,应该会在扩展程序图标下方看到一个弹出窗口。就像这样(请检查此链接中的弹出窗口)。
我的弹出窗口(userinfo.html)要求使用用户名和密码登录。当用户输入用户名和密码并登录时,弹出窗口应该关闭,当用户再次点击扩展图标时,它应该导航到一个网站。我怎样才能做到这一点?这是我的 background.js
chrome.browserAction.onClicked.addListener(function(tab) {
if(!localStorage.username){
chrome.browserAction.setPopup({
popup: "userinfo.html"
});
}
else
//navigate to website
});
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我显示了我的弹出窗口。当用户在安装后第一次单击该图标时,会出现弹出窗口。否则,它会导航到一个网站。现在我的问题是,当我只在图标上单击两次时,就会出现弹出窗口。第二个问题是,在我输入用户名和密码并单击登录后,弹出窗口关闭,这很好。当我再次单击图标时,它实际上应该导航到该网站,但在我的代码中它再次显示弹出。当我重新加载扩展程序时,它可以正常工作。为什么会这样?请帮我。有一个名为 userinfo.html 的文件,它应该显示为一个弹出窗口。我怎样才能做到这一点?请帮我。