我用谷歌搜索了一段时间,最常用的方法似乎是
date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
Run Code Online (Sandbox Code Playgroud)
但是,这种方法似乎在1893-04-01之前的日期失败了
我的机器上的以下测试失败,结果为1893-03-31而不是1893-04-01:
@Test
public void testBeforeApril1893() throws ParseException {
Date date = new SimpleDateFormat("yyyy-MM-dd").parse("1893-04-01");
System.out.println(date);
LocalDate localDate2 = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println(localDate2);
assertEquals(1893, localDate2.getYear());
assertEquals(4, localDate2.getMonth().getValue());
assertEquals(1, localDate2.getDayOfMonth());
}
Run Code Online (Sandbox Code Playgroud)
这System.out.prinln是我要仔细检查创建的日期.我看到以下输出:
Sun Apr 02 00:00:00 CET 1893
1893-04-02
Sat Apr 01 00:00:00 CET 1893
1893-03-31
Run Code Online (Sandbox Code Playgroud)
对于1400-04-01,我甚至得到1400-04-09的输出.
是否有任何方法可以将1893-04之前的日期正确转换为LocalDate?
正如一些人所指出的那样,在这个问题中解释了这种转变的原因.但是,我不知道如何根据这些知识推断出正确的转换.
我正在尝试使用 java 11 设置一个简单的 maven 项目。由于我希望将 JAVA_HOME 保持为版本 8,因此我正在maven-toolchains-plugin使用 jdk11 使 maven 用于该项目。
虽然 maven 成功找到了 jdk-11.0.1 的匹配工具链,但我不断收到“javac: invalid flag: --release”。我究竟做错了什么?
以下是插件配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-toolchains-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>toolchain</goal>
</goals>
</execution>
</executions>
<configuration>
<toolchains>
<jdk>
<version>11</version>
</jdk>
</toolchains>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
工具链定义为:
<toolchain>
<type>jdk</type>
<provides>
<version>11</version>
<id>JavaSE-1.11</id>
</provides>
<configuration>
<jdkHome>C:\Program Files\Java\jdk-11.0.1\bin</jdkHome>
</configuration>
<toolchain>
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个色彩过渡的色标.我目前正在做的是:
test <- data.frame(x = c(1:20), y = seq(0.01, 0.2, by = 0.01))
cutoff <- 0.10
ggplot(data = test,
aes(x = as.factor(x), y = y, fill = log(y), width = 1, binwidth = 0)) +
geom_bar(stat = "identity") +
scale_fill_gradientn(colours = c("red", "red", "yellow", "green"),
values = rescale(log(c(0.01, cutoff - 0.0000000000000001, cutoff, 0.2))),
breaks = c(log(cutoff)), label = c(cutoff))
Run Code Online (Sandbox Code Playgroud)
它正在制作我想要的情节.但是,颜色条中断的位置在某种程度上取决于截止值.有时低于价值,有时高于,有时在线.以下是一些具有不同截止值(0.05,0.06,0.1)的图:

我究竟做错了什么?或者,是否有更好的方法来创建这样的色标?
基本上我想在 x 上应用 f 次 n 次,我只对结果感兴趣。有没有比 更好的方法(nth (iterate f x) n)?
我是来自Java背景的Scala新手,目前对考虑的最佳实践感到困惑Option[T].
我觉得使用Option.map它更实用,更美观,但这并不是说服其他人的好理由.有时,isEmpty检查感觉更直接,因此更具可读性.有客观上的优势,还是个人偏好?
例:
变化1:
someOption.map{ value =>
{
//some lines of code
}
} orElse(foo)
Run Code Online (Sandbox Code Playgroud)
变化2:
if(someOption.isEmpty){
foo
} else{
val value = someOption.get
//some lines of code
}
Run Code Online (Sandbox Code Playgroud)
我故意排除使用fold或模式匹配的选项.我现在对Option作为一个集合处理的想法感到高兴,并且使用模式匹配进行简单的isEmpty检查是滥用模式匹配恕我直言.但无论我为什么不喜欢这些选项,我都希望将这个问题的范围保持为标题中指定的上述两种变体.