已经提出了向Java语言添加闭包的三个主要建议:
我的问题:
有人可以解释一下Instant.getEpochSecond与Instant.toEpochMilli命名背后的理由吗?我能想到的唯一原因是瞬间的内部表示为相对于纪元的秒数和相对于该秒的纳秒时间,而毫秒数是根据这两个值计算的.
但是为什么要让这样的实现细节泄漏到新的API中呢?
我正在学习Android并且需要日期/时间.我被同事推荐为Joda-time,这似乎正是我需要取得的进展.不幸的是,我无法让它工作.
我正在使用intellij,这是Android 2.2.
我采取的步骤:
然后我得到这个错误:
警告:忽略没有关联的EnclosingMethod属性的匿名内部类的InnerClasses属性.(这个类可能是由一个破碎的编译器产生的.)
我不知道从哪里开始.帮助将不胜感激!
我有一些关于我试图用Joda-Time代表的开放时间的数据.
典型的开放时间如下:
开放时间为9至12,13至20.
我在Joda-Time实体中表示它们的主要原因是验证它们:
在API方面,Joda-Time Interval类具有进行此验证所需的方法,但Intervals是日期 - 时间 - 连续体中的一对时刻.我想代表他们独立于绝对时间,有点像两个LocalTime部分的间隔.这可能吗?
我想检查一下日期是否包含二月二十九日.
private static final MonthDay LEAP = MonthDay.of(Month.FEBRUARY, 29);
Run Code Online (Sandbox Code Playgroud)
我试过了:
if (LEAP.isAfter(beginDate) && LEAP.isBefore(maturity)) {
}
Run Code Online (Sandbox Code Playgroud)
但beginDate并maturity是从类型LocalDate
这样的方法中.isAfter,并.isBefore不能使用.
例
beginDate是15.01.2012
maturity是二○一三年一月二十〇日
在此期间,2月29日存在
解
我终于找到了解决方案:
for (int i = beginDate.getYear(); i <= maturity.getYear(); i++) {
final Year year = Year.of(i);
if (year.isLeap()) {
if (beginDate.compareTo(LEAP.atYear(i)) <= 0 || maturity.compareTo(LEAP.atYear(i)) >= 0) {
minMaturity.plusDays(1);
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud) 我的输入字符串是PM时间:
log(start);
// Sunday, January 09, 2011 6:30:00 PM
Run Code Online (Sandbox Code Playgroud)
我正在使用Joda Time的模式语法来解析DateTime:
DateTimeFormatter parser1 =
DateTimeFormat.forPattern("EEEE, MMMM dd, yyyy H:mm:ss aa");
DateTime startTime = parser1.parseDateTime(start);
Run Code Online (Sandbox Code Playgroud)
那么,为什么我的输出字符串是AM?
log(parser1.print(startTime));
// Sunday, January 09, 2011 6:30:00 AM
Run Code Online (Sandbox Code Playgroud) 我正在编写一些代码来执行与当前时间相关的日期和时间计算.在Joda时间,这是通过(Java)构造函数访问的,因为它是一个不可变对象.我需要能够模拟,以便new DateTime()返回一个特定的常量瞬间,这样我就可以做出明智的测试断言,但只留下所有其他DateTime方法.
这证明是令人讨厌的.Grails mockFor(DateTime, true)不会让我模拟Java构造函数,但是没有明显或可读的非构造方法来获取Joda时间.
唯一可用的选项似乎涉及低级JVM技术,如JMockit或EasyMock 3类模拟,这是Grails的痛苦.有没有简单/直接的方法来实现这一目标?
考虑以下代码:
Date date = new SimpleDateFormat("MMddyyyy").parse("01011500");
LocalDate localDateRight = LocalDate.parse(formatter.format(date), dateFormatter);
LocalDate localDateWrong = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).toLocalDate();
System.out.println(date); // Wed Jan 01 00:00:00 EST 1500
System.out.println(localDateRight); // 1500-01-01
System.out.println(localDateWrong); // 1500-01-10
Run Code Online (Sandbox Code Playgroud)
我知道1582年是Julian和Gregorian日历之间的截止点.我不知道为什么会发生这种情况,或者如何调整它.
这是我到目前为止所发现的:
BaseCalender设置为的日期JulianCalendardate.toInstant() 回来 Instant.ofEpochMilli(getTime())date.getTime() 返回-14830974000000所以似乎要么返回的毫秒getTime()是错误的(不太可能),要么与我预期的不同,我需要考虑差异.
我正在使用Joda来解析日期并使用不使用前导零的格式,例如:
Mon Nov 20 14:40:36 2006
Mon Nov 6 14:40:36 2006
Run Code Online (Sandbox Code Playgroud)
请注意,dayOfMonth字段用空白填充.
目前我似乎必须使用两种不同的格式,如果一个失败则重新分析
"EEE MMM dd HH:mm:ss yyyy"
"EEE MMM d HH:mm:ss yyyy"
Run Code Online (Sandbox Code Playgroud)
是否有单一格式(或API开关)处理这两种情况?(SimpleDateFormat的答案是一样的 - 我不使用它?)
下面我有3种方法.第一个很简单.它只计算总天数.但是,第二个不仅会计算天数,还会忽略传递给方法的星期几.
我的问题是第三种方法并不总是正确的.它应该匹配第二种方法.我猜它与闰年有关,因为当它不正确时差异通常为+ = 3 | 4.
我试图以weekday(serial_number,[return_type])某种方式模拟Excel的公式.
serial_number = startDate:Date - daysOfWeekToInclude:Array<Integer>
Run Code Online (Sandbox Code Playgroud)
| A | B | C
+---------+----------------------------------------------------+-----------
1 | Start | =DATE(2014,9,7) | 9/7/2014
2 | End | =DATE(2025,6,13) | 6/13/2025
3 | Include | ={1,2,4,6} (Mon, Tue, Thu, & Sat) | <Disp Only>
4 | Days | =SUM(INT((WEEKDAY($B$1-{1,2,4,6},1)+$B$2-$B$1)/7)) | 2248
Run Code Online (Sandbox Code Playgroud)
这里有关于此功能的更多信息:如何计算/计算Excel中两个日期之间的天数?

只需计算两个日期之间的天数.
public static int simpleDaysBetween(final LocalDate start,
final LocalDate end) {
return (int) ChronoUnit.DAYS.between(start, end);
}
Run Code Online (Sandbox Code Playgroud)使用循环计算天数,忽略一周中的某些天.
public static …Run Code Online (Sandbox Code Playgroud)