import java.time.LocalDate;
import java.time.Period;
public class DateDiff {
public static void main(String[] args) {
/** The date at the end of the last century */
LocalDate endofCentury = LocalDate.of(2000, 12, 31);
LocalDate now = LocalDate.now();
Period diff = Period.between(endofCentury, now);
System.out.printf("The 21st century (up to %s) is %s old%n", now, diff);
System.out.printf("The 21st century is %d years, %d months and %d days old",
diff.getYears(), diff.getMonths(), diff.getDays());
}
}
Run Code Online (Sandbox Code Playgroud)
没有找到本地日期我错过了一个import指令
使用Java我有一个SimpleTimeZone具有GMT偏移和来自遗留系统的夏令时信息的实例.
我想检索ZoneId能够使用Java 8时间API.
实际上,toZoneId返回ZoneId没有夏令时的信息
SimpleTimeZone stz = new SimpleTimeZone( 2 * 60 * 60 * 1000, "GMT", Calendar.JANUARY,1,1,1, Calendar.FEBRUARY,1,1,1, 1 * 60 * 60 * 1000);
stz.toZoneId();
Run Code Online (Sandbox Code Playgroud) 我可以通过秒和纳秒来访问TAI时间 - 让我称之为T.
我想现在创建一个Instant与此值对应的java 类T.
我已经找到了合适的构造函数来做到这一点,但没有运气.
我想检查目标时间是否在两个给定时间之间,而不考虑使用Java8时间的日期.假设开始时间是"21:30",结束时间是"06:30",目标时间是"03:00",所以程序应该返回true.
@Test
public void posteNuit()
{
DateTimeFormatter format = DateTimeFormatter.ofPattern("HH:mm");
String s = "21:30";
String e = "06:30";
String t = "03:00";
LocalTime startTime = LocalTime.parse(s, format);
LocalTime endTime = LocalTime.parse(e, format);
LocalTime targetTime = LocalTime.parse(t, format);
if ( targetTime.isBefore(endTime) && targetTime.isAfter(startTime) ) {
System.out.println("Yes! night shift.");
} else {
System.out.println("Not! night shift.");
}
}
Run Code Online (Sandbox Code Playgroud) 如果我计算2的区别LocalDate在的java.time使用:
Period p = Period.between(testDate, today);
Run Code Online (Sandbox Code Playgroud)
然后我得到一个年,月,天数的输出,如:
Days = 9
Months = 6
Years = 18
Run Code Online (Sandbox Code Playgroud)
有没有人知道一种干净的方式来表示作为十进制类型的值(即上面会是什么18.5...)?
给定两个java.time.Duration实例,如何计算一个持续时间适合另一个持续时间的整数次?
使用它似乎很明显,first.toNanos() / second.toNanos()但这种方法的Javadoc引入了一个小问题:
如果此持续时间太大而无法适应长纳秒,则抛出异常.
我们如何计算这个划分而没有溢出的风险?
更新:我正在实现令牌桶算法.为此,我需要知道自上次检查以来已经过了多少"句点",以便使用额外的令牌填充存储桶.我不能简单地降低纳秒精度,因为速率可以用纳秒来指定.
我试图简化我的生活解析日志和收集时间.我得到一个带有日志语句的文件,这些日志语句都以这种格式的时间戳开头
16:08:39.660
Run Code Online (Sandbox Code Playgroud)
我想把这个字符串变成一个简单的时间,我可以在几秒或几毫秒内得到两者之间的差异.我一直在这里看,有人建议使用
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss.sss");
Date start = format.parse(startTimeString);
Date end = format.parse(endTimeString);
long difference = end.getTime() - start.getTime();
Run Code Online (Sandbox Code Playgroud)
然而,这给了我完全不同的时代.例如,16:08:39.660给了我4:19.因为时间错了,它给了我负面的差异,这在我给定的背景下是不可能的.我该怎么转
16:08:39.660
16:08:52.452
Run Code Online (Sandbox Code Playgroud)
成了差异12.792?
I have a variable MINDATE in MyConstants file. You can see the declaration below.
public static final LocalDateTime MINDATE = LocalDateTime.of(LocalDate.of(2011, 1, 1), LocalTime.MIDNIGHT);
Run Code Online (Sandbox Code Playgroud)
I am consuming this variable in another class just by using MyConstants.MINDATE
then I get the following exception
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.cw.na.vos.DateTest.main(DateTest.java:14)
Caused by: java.lang.IllegalArgumentException: Unknown pattern letter: T
at java.time.format.DateTimeFormatterBuilder.parsePattern(Unknown Source)
at java.time.format.DateTimeFormatterBuilder.appendPattern(Unknown Source)
at java.time.format.DateTimeFormatter.ofPattern(Unknown Source)
at com.cw.na.vos.MyConstants.<clinit>(MyConstants.java:228)
... 1 more
Run Code Online (Sandbox Code Playgroud)
I am unable to understand the reason behind it.
public …Run Code Online (Sandbox Code Playgroud) 我正在尝试解析日期字符串,OffsetDateTime如下所示.
但我得到以下异常,
线程"main"中的异常java.time.format.DateTimeParseException:无法在索引0处解析文本'Mon Jun 18 00:00:00 IST 2012'
public class ParseExample {
public static void main(String... args) throws ParseException {
String dateStr = "Mon Jun 18 00:00:00 IST 2012";
System.out.println(OffsetDateTime.parse(dateStr));
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个错误.
谢谢.
根据Instant的文档,最小的瞬间是-1000000000-01-01T00:00Z,所以年份-1000000000和时区是UTC.所以我希望这个程序能够工作,并且atOffset是一个noop:
import java.time.*;
public class A {
public static void main(String[] args) {
Instant i = Instant.MIN;
System.out.println(i);
System.out.println(i.atOffset(ZoneOffset.UTC));
}
}
Run Code Online (Sandbox Code Playgroud)
但相反,它会抛出此异常atOffset:
-1000000000-01-01T00:00:00Z
Exception in thread "main" java.time.DateTimeException: Invalid value for Year (valid values -999999999 - 999999999): -1000000000
at java.time.temporal.ValueRange.checkValidIntValue(ValueRange.java:330)
at java.time.temporal.ChronoField.checkValidIntValue(ChronoField.java:722)
at java.time.LocalDate.ofEpochDay(LocalDate.java:341)
at java.time.LocalDateTime.ofEpochSecond(LocalDateTime.java:422)
at java.time.OffsetDateTime.ofInstant(OffsetDateTime.java:328)
at java.time.Instant.atOffset(Instant.java:1195)
at A.main(A.java:7)
Run Code Online (Sandbox Code Playgroud)
那是一个错误吗?根据该验证的消息,最低年份是-999999999文件所说的-1000000000.