我在使用 Joda 函数时遇到问题daysBetween。它不断地告诉我
The method daysBetween(ReadableInstant, ReadableInstant) in the type Days is not applicable for the arguments (LocalDate, LocalDate)
Run Code Online (Sandbox Code Playgroud)
当我尝试插入两个localdate项目时。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(reviewDate, formatter);
Date dateNow = new Date();
LocalDate date1 = LocalDate.parse(dateNow.toString(),formatter);
int days = Days.daysBetween(date,date1).getDays();
Run Code Online (Sandbox Code Playgroud)
我试图获取reviewDate与当前日期之间的天数date1我做错了什么?
自 Java 9 以来 Java 日期和时间 API 发生了变化。 LocalDateTime 现在具有微秒精度。
Java 9 具有 java.time.Clock 的全新实现,能够以比毫秒(十进制小数的三位数字)更精细的分辨率捕获当前时刻。
我们从后端服务中获得以微秒为单位的时间。
System.currentTimeMillis > 1565245051795 > 2019-08-08T06:17:31.795
Service.getTime > 1565245051795306 > 2019-08-08T06:17:31.795306
Run Code Online (Sandbox Code Playgroud)
为了构造在我们的应用程序中使用的 LocalDateTime,我们执行
long timeMicros = service.getTime();
long timeMillis = timeMicros / 1000;
LocalDateTime ldt = Instant.ofEpochMilli(timeMillis).atZone(ZoneId.systemDefault()).toLocalDateTime();
Run Code Online (Sandbox Code Playgroud)
为了查询服务,我们再次需要时间微秒,然后我们做
long timeMillis = dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
long timeMicros = timeMillis * 1000;
Run Code Online (Sandbox Code Playgroud)
问题是我们没有取回时间微秒的精度。
是否可以创建具有微秒精度的 Instant ?
我们现在使用的是 Java 11。当我们的一个 JUnit 测试由于增加的微秒精度而失败时,我注意到了这一变化。
对于 JUnit 测试,我找到了一个解决方法:
private static final LocalDateTime START = LocalDateTime.now().truncatedTo(ChronoUnit.MILLIS);
Run Code Online (Sandbox Code Playgroud)
我不确定这是一种解决方法还是实际的解决方案,但添加时间戳的最后三微秒数字似乎有效。
System.currentTimeMillis > 1565245051795 > 2019-08-08T06:17:31.795
Service.getTime > …Run Code Online (Sandbox Code Playgroud) 我有一个输入日期格式yyyy-MM-dd_HH:mm:ss.SSS,并以这种方式将其转换为 long:
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss.SSS");
try {
Date date = simpleDateFormat.parse(lapTime);
time = date.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
并且,经过一些操作后,mm:ss.SSS从 long 返回:
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm:ss.SSS");
return simpleDateFormat.format(new Date(time));
Run Code Online (Sandbox Code Playgroud)
如何将我的旧样式代码更改为 Java8?我看了LocalDateTime和Instant类,但不知道如何正确使用它们。
我有以下代码以某种格式获取当前时间。当我在我的笔记本电脑上测试它时,这在本地工作得非常好。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS z");
ZonedDateTime date = ZonedDateTime.now();
String timeStamp = formatter.format(date);
Run Code Online (Sandbox Code Playgroud)
以上在本地工作,时间戳值采用以下格式:2020-02-24 05:23:20.675 MST
但是当我将其推送到生产时,格式更改为:2020-02-24 05:23:20.675 -07:00
我无权访问生产设置,处理它的团队在另一个时区,现在无法获得它们。相信这是他们最后的一些设置,但有什么我可以做的,格式总是像:2020-02-24 05:23:20.675 MST?
请指教,谢谢。
我想在 Java 中解析自定义的多种日期格式。这是我的代码
场景 1: 模式的顺序:
DateTimeFormatter formatter = new DateTimeFormatterBuilder() .appendOptional(DateTimeFormatter.ofPattern("yyMMdd'h'HH")) .appendOptional(DateTimeFormatter.ofPattern("yyMMdd")).toFormatter();
作品:
String dateString1 = "201028h05";
LocalDateTime date1 = LocalDateTime.parse(dateString1, formatter);
Run Code Online (Sandbox Code Playgroud)
不起作用:
String dateString2 = "201028";
LocalDateTime date1 = LocalDateTime.parse(dateString2, formatter);
Run Code Online (Sandbox Code Playgroud)
场景 2: 模式的顺序:
DateTimeFormatter formatter = new DateTimeFormatterBuilder() .appendOptional(DateTimeFormatter.ofPattern("yyMMdd")).toFormatter(); .appendOptional(DateTimeFormatter.ofPattern("yyMMdd'h'HH"))
不起作用:
String dateString1 = "201028h05";
LocalDateTime date1 = LocalDateTime.parse(dateString1, formatter);
Run Code Online (Sandbox Code Playgroud)
作品:
String dateString2 = "201028";
LocalDateTime date1 = LocalDateTime.parse(dateString2, formatter);
Run Code Online (Sandbox Code Playgroud)
无论任何输入模式顺序如何,如何使其适用于两种日期模式。我不想为此使用任何外部依赖。
我想将我的字符串转换为有效的日期格式,即使月份和日期是可选的
例如,我有如下字符串
String date1 = "20-12-2021"
String date2 = "12-2021" i.e without day
String date3 = "2021" i.e without day & month
String date4 = "21" i.e without day, month & just last two digits of the year
Run Code Online (Sandbox Code Playgroud)
我想将上述所有字符串格式转换为“yyyy-mm-dd”格式的有效日期,如下所示,
For date1, Date should be "2021-12-20"
For date2, Date should be "2021-12-01"
For date3, Date should be "2021-01-01"
For date4, Date should be "2021-01-01"
Run Code Online (Sandbox Code Playgroud)
你能帮我解决这个问题吗?任何信息都会非常有帮助。我无法定义为解析器格式化的单个字符串,因为在我的场景中字符串格式是不可预测的。
我正在尝试仅解析时间,忽略字符串中的工作日,格式如下:“星期一早上 5 点”
这是我的代码:
String dateTxt = "Monday 5AM";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ha");
LocalTime lt = LocalTime.parse(dateTxt, formatter);
Run Code Online (Sandbox Code Playgroud)
它抛出一个异常:
java.time.format.DateTimeParseException: Text 'Saturday 1AM' could not be parsed
如何仅从该字符串解析时间?
我刚刚将 Java 从 JDK-15 升级到 JDK-16,在Date使用SimpleDateFormat. 仅使用 9 月份进行格式化时yyyy-MMM-dd就给出了 4 个字符而不是 3 个字符。
例如: 2021-Sep-11显示为2021-Sept-11
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 150);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MMM-dd");
System.out.println(cal.getTime());
String formatted = format1.format(cal.getTime());
System.out.println(formatted);
Run Code Online (Sandbox Code Playgroud)
对我来说看起来像一个错误。我在发行说明中看不到对此的任何更新。有人面临类似的问题吗?一直工作到 JDK-15。
LocalDate在 Java 中有两个类似的方法equals和isEqual.
它们之间有什么区别?
当他们输出不同的结果时?
我正在尝试使用下面的代码将时间字符串转换为毫秒。因为我会将时间用作倒数计时器。
问题是时间来自数据库并且它是 varchar 类型。我试过这段代码,但它没有给我正确的输出。
String timeDuration = "10:00"; //for example only
SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");
Date time = sdf.parse(timeDuration);
long millis = time.getTime(); //The output must be 600000
Run Code Online (Sandbox Code Playgroud)
我使用此代码得到错误的“毫秒”。
我正在使用 Android Studio。