小编Hen*_*ang的帖子

如何在1893年之前的日期正确地将util.Date转换为time.LocalDate

我用谷歌搜索了一段时间,最常用的方法似乎是

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 java-8 localdate

10
推荐指数
1
解决办法
725
查看次数

带有JDK11的maven:javac:无效标志:--release

我正在尝试使用 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)

java maven java-11

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

如何在ggplot2中制作具有急剧过渡的色标

我正在尝试创建一个色彩过渡的色标.我目前正在做的是:

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)的图:

截止为0.05 截止在0.06 截止在0.10

我究竟做错了什么?或者,是否有更好的方法来创建这样的色标?

r ggplot2

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

对起始值应用函数 n 次

基本上我想在 x 上应用 f 次 n 次,我只对结果感兴趣。有没有比 更好的方法(nth (iterate f x) n)

clojure

5
推荐指数
1
解决办法
1655
查看次数

在Option.isEmpty和Option.get上使用Option.map有什么好处?

我是来自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检查是滥用模式匹配恕我直言.但无论我为什么不喜欢这些选项,我都希望将这个问题的范围保持为标题中指定的上述两种变体.

scala

4
推荐指数
2
解决办法
463
查看次数

标签 统计

java ×2

clojure ×1

ggplot2 ×1

java-11 ×1

java-8 ×1

localdate ×1

maven ×1

r ×1

scala ×1