小编Jod*_*hen的帖子

Java中的闭包 - 三个主要建议之间的语法差异?

已经提出了向Java语言添加闭包的三个主要建议:

我的问题:

  • 在语法方面,三个提案(BGGA,CICE和FCM)之间有什么区别?

java closures bgga inner-classes java-7

10
推荐指数
2
解决办法
732
查看次数

Instant.getEpochSecond与Instant.toEpochMilli背后的基本原理

有人可以解释一下Instant.getEpochSecondInstant.toEpochMilli命名背后的理由吗?我能想到的唯一原因是瞬间的内部表示为相对于纪元的秒数​​和相对于该秒的纳秒时间,而毫秒数是根据这两个值计算的.

但是为什么要让这样的实现细节泄漏到新的API中呢?

java java-time

10
推荐指数
1
解决办法
1462
查看次数

无法让Joda-time在Android上运行.

我正在学习Android并且需要日期/时间.我被同事推荐为Joda-time,这似乎正是我需要取得的进展.不幸的是,我无法让它工作.

我正在使用intellij,这是Android 2.2.

我采取的步骤:

  1. 网站下载Joda-time jar .
  2. Intellij>文件>项目结构>附加类
  3. 建立

然后我得到这个错误:

警告:忽略没有关联的EnclosingMethod属性的匿名内部类的InnerClasses属性.(这个类可能是由一个破碎的编译器产生的.)

我不知道从哪里开始.帮助将不胜感激!

time android dalvik jodatime

9
推荐指数
1
解决办法
3099
查看次数

如何使用Joda-Time表达部分间隔?

我有一些关于我试图用Joda-Time代表的开放时间的数据.

典型的开放时间如下:

开放时间为9至12,13至20.

我在Joda-Time实体中表示它们的主要原因是验证它们:

  • 检查开放时间是否有效(9是在12之前等)
  • 检查没有开放区间重叠("9-12和11-13"是非法的)

在API方面,Joda-Time Interval类具有进行此验证所需的方法,但Intervals是日期 - 时间 - 连续体中的一对时刻.我想代表他们独立于绝对时间,有点像两个LocalTime部分的间隔.这可能吗?

java jodatime

9
推荐指数
1
解决办法
4520
查看次数

Java 8 DateTime检查句点是否包含特定日期

我想检查一下日期是否包含二月二十九日.

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)

beginDatematurity是从类型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)

java datetime java-8 java-time

9
推荐指数
1
解决办法
3214
查看次数

为什么Joda时间会将输入字符串中的PM更改为AM?

我的输入字符串是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)

java datetime parsing jodatime

8
推荐指数
1
解决办法
5558
查看次数

在Grails中,有一种使用Joda时间模拟当前时间的好方法吗?

我正在编写一些代码来执行与当前时间相关的日期和时间计算.在Joda时间,这是通过(Java)构造函数访问的,因为它是一个不可变对象.我需要能够模拟,以便new DateTime()返回一个特定的常量瞬间,这样我就可以做出明智的测试断言,但只留下所有其他DateTime方法.

这证明是令人讨厌的.Grails mockFor(DateTime, true)不会让我模拟Java构造函数,但是没有明显或可读的非构造方法来获取Joda时间.

唯一可用的选项似乎涉及低级JVM技术,如JMockit或EasyMock 3类模拟,这是Grails的痛苦.有没有简单/直接的方法来实现这一目标?

time grails groovy mocking jodatime

8
推荐指数
2
解决办法
1677
查看次数

为什么在1582之前将Java日期转换为使用Instant的LocalDate给出不同的日期?

考虑以下代码:

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设置为的日期JulianCalendar
  • date.toInstant() 回来 Instant.ofEpochMilli(getTime())
  • date.getTime() 返回-14830974000000
  • -14830974000000是Wed,10 Jan 1500 05:00:00 GMT Gregorian

所以似乎要么返回的毫秒getTime()是错误的(不太可能),要么与我预期的不同,我需要考虑差异.

java datetime date java-8 java-time

8
推荐指数
1
解决办法
1724
查看次数

使用可变空格解析日期

我正在使用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的答案是一样的 - 我不使用它?)

java date jodatime simpledateformat

7
推荐指数
3
解决办法
5615
查看次数

使用Java 8计算两个日期之间的天数,同时忽略一周中的某些天

下面我有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中两个日期之间的天数?

原始图像

在此输入图像描述

方法

  1. 只需计算两个日期之间的天数.

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

    public static …
    Run Code Online (Sandbox Code Playgroud)

java performance java-8 java-time

7
推荐指数
1
解决办法
5634
查看次数