小编Ami*_*arg的帖子

如何使用可选的秒参数创建DateTimeformatter

我正在尝试创建一个DateTimeformatter以验证以下日期时间:

String date1 = "2017-07-06T17:25:28";
String date2 = "2017-07-06T17:25:28.1";
String date3 = "2017-07-06T17:25:28.12";
String date4 = "2017-07-06T17:25:28.123";
String date5 = "2017-07-06T17:25:28.1234";
String date6 = "2017-07-06T17:25:28.12345";
String date7 = "2017-07-06T17:25:28.123456";
String date8 = "2017-07-06T17:25:28.";
Run Code Online (Sandbox Code Playgroud)

我已尝试使用以下日期时间格式器来验证上述日期:

public static final String DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
DateTimeFormatter formatter1 = new DateTimeFormatterBuilder()
                                   .appendPattern(DATE_TIME_FORMAT_PATTERN)
                                   .appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
                                   .toFormatter();
Run Code Online (Sandbox Code Playgroud)

它工作正常,所有上述日期,但根据我的要求就应该失败java.time.format.DateTimeParseExceptiondate8.

注意:我知道我可以使用以下格式化程序获得预期的结果:

DateTimeFormatter formatter2 = DateTimeFormatter
                       .ofPattern("yyyy-MM-dd'T'HH:mm:ss[.SSSSSS][.SSSSS][.SSSS][.SSS][.SS][.S]");
Run Code Online (Sandbox Code Playgroud)

但我想知道我们可以通过改变来实现预期的结果formatter1吗?

要解析我使用的日期:

LocalDateTime.parse(date1, formatter1);
Run Code Online (Sandbox Code Playgroud)

java datetime-parsing java-8 java-time

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

当我们创建空的不可变列表/集合/映射时,是否有任何实际应用/用例

Java 9 提供了一种创建空的不可变列表、集合和映射的方法。

List list = List.of(); 
Set set = Set.of(); 
Map map = Map.of();
Run Code Online (Sandbox Code Playgroud)

但我无法理解创建空的不可变列表/集合/映射的实际用例是什么。

请帮助我理解空的不可变列表/集合/映射的实际用例。

java collections

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

为什么使用线程添加值后从 ArrayList 获取空值

我多次运行以下代码,发现有时我从 ArrayList 中得到“null”。当我向数组添加整数值时,我无法理解为什么会发生这种情况。

package com;

import java.util.ArrayList;
import java.util.List;

public class test implements Runnable {

    static List<Integer> ls = new ArrayList<Integer>();

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(new test());
        Thread t2 = new Thread(new test());

        t1.start();
        t2.start();
        t1.join();
        t2.join();
        System.out.println(ls.size());
        for (int i = 0; i < ls.size(); ++i) {
            System.out.println(i + "  " + ls.get(i));
        }
    }

    @Override
    public synchronized void run() {
        try {
            for (int i = 0; i < 20; …
Run Code Online (Sandbox Code Playgroud)

java collections

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

如何在一个DateTimeFormater Java 8中处理所有区域偏移

我需要DateTimeFormatter为以下有效日期创建一个.

  String date1 = "2017-06-20T17:25:28";
  String date2 = "2017-06-20T17:25:28.477777";
  String date3 = "2017-06-20T17:25:28.477777Z";
  String date4 = "2017-06-20T17:25:28.477777UTC";
  String date5 = "2017-06-20T17:25:28.477777-05";
  String date6 = "2017-06-20T17:25:28.477777+05";
  String date7 = "2017-06-20T17:25:28.477777+05:30";
  String date8 = "2017-06-20T17:25:28.477777-05:30";
  String date9 = "2017-06-20T17:25:28.477777+0530";
  String date10 = "2017-06-20T17:25:28.477777-0530";
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下日期时间格式化程序,但最后两个日期(date9,date10)失败.

private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()
    .appendPattern("yyyy-MM-dd'T'HH:mm:ss")
    .appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
                        .optionalStart().appendZoneId().optionalEnd()
                        .optionalStart().appendOffset("+HH", "+00").optionalEnd()
                        .optionalStart().appendOffset("+HH:mm", "+00:00").optionalEnd()
                        .optionalStart().appendOffset("+HHmm", "+0000").optionalEnd().toFormatter();
Run Code Online (Sandbox Code Playgroud)

所有日期都date1可以date8正常工作,但我DateTimeParseException在尝试解析最后两个日期时得到了一个:

线程"main"java.time.format.DateTimeParseException中的异常:无法解析文本"2017-06-20T17:25:28.477777 + 0530",在索引29处找到未解析的文本

用于解析我正在使用的日期.

LocalDateTime.parse(date1, …
Run Code Online (Sandbox Code Playgroud)

datetime-parsing java-8 java-time zoneddatetime

3
推荐指数
1
解决办法
712
查看次数

为什么 EnumMap 为空值分配一个 Object 类对象?

我正在研究 Java EnumMap 实现,发现如果我将空值传递给 EnumMap,EnumMap 会分配一个 Object 类对象来代替空值。

来自 EnumMap 类的代码:

public V put(K key, V value) {
        typeCheck(key);

        int index = key.ordinal();
        Object oldValue = vals[index];
        vals[index] = maskNull(value);
        if (oldValue == null)
            size++;
        return unmaskNull(oldValue);
}

private Object maskNull(Object value) {
        return (value == null ? NULL : value);
}

private static final Object NULL = new Object() {
            public int hashCode() {
                return 0;
            }

            public String toString() {
                return "java.util.EnumMap.NULL";
            }
   };
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么 java 放置一个对象而不是直接为给定的键分配空值。java 这样做有什么好处。

java enum-map

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