我正在尝试创建一个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.DateTimeParseException的date8.
注意:我知道我可以使用以下格式化程序获得预期的结果:
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 9 提供了一种创建空的不可变列表、集合和映射的方法。
List list = List.of();
Set set = Set.of();
Map map = Map.of();
Run Code Online (Sandbox Code Playgroud)
但我无法理解创建空的不可变列表/集合/映射的实际用例是什么。
请帮助我理解空的不可变列表/集合/映射的实际用例。
我多次运行以下代码,发现有时我从 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) 我需要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) 我正在研究 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 这样做有什么好处。