如何在Java中设置日期的最小小时数?
我试图得到上个月第一天的日期和时间;具体地说,现在是一月份,我正试图得到:如何在Java中设置日期的最小小时数?,java,Java,我试图得到上个月第一天的日期和时间;具体地说,现在是一月份,我正试图得到:Sun Dec 01 00:00:00 EST 2013。我正在使用下面的代码片段,在研究这个主题时,我从Stackoverflow上的另一个代码片段中修改了它;此代码段将返回:Sun Dec 01 12:00:00 EST 2013。我不明白为什么设定第一个小时的最短时间实际上会返回正午 Calendar aCalendar = Calendar.getInstance(); // add -1 month to cur
Sun Dec 01 00:00:00 EST 2013
。我正在使用下面的代码片段,在研究这个主题时,我从Stackoverflow上的另一个代码片段中修改了它;此代码段将返回:Sun Dec 01 12:00:00 EST 2013
。我不明白为什么设定第一个小时的最短时间实际上会返回正午
Calendar aCalendar = Calendar.getInstance();
// add -1 month to current month
aCalendar.add(Calendar.MONTH, -1);
// set DATE to 1, so first date of previous month
//aCalendar.set(Calendar.DATE, 1);
aCalendar.set(Calendar.DATE, aCalendar.getActualMinimum(Calendar.DAY_OF_MONTH));
aCalendar.set(Calendar.HOUR, aCalendar.getActualMinimum(Calendar.HOUR));
aCalendar.set(Calendar.MINUTE, aCalendar.getActualMinimum(Calendar.MINUTE));
aCalendar.set(Calendar.SECOND, aCalendar.getActualMinimum(Calendar.SECOND));
Date firstDateOfPreviousMonth = aCalendar.getTime();
如果如图所示修改以下行并设置为0,则会得到相同的结果:
aCalendar.set(Calendar.HOUR, 0);
如果我按以下方式修改它,我将得到下午1点:
aCalendar.set(Calendar.HOUR, 0);
结果:Sun Dec 01 13:00:00 EST 2013
来自Java文档
get和set的小时字段号,指示上午的小时数
或者下午
您需要使用一天中的小时数
get和set的HOUR_OF_DAY字段编号,指示工作时间
一天
或者相应地设置AM\u PM
用于get和set的AM\U PM字段编号,指示小时是否为
中午之前或之后
在任何情况下,请花点时间查阅Java文档中的
get和set的小时字段号,指示上午的小时数
或者下午
您需要使用一天中的小时数
get和set的HOUR_OF_DAY字段编号,指示工作时间
一天
或者相应地设置AM\u PM
用于get和set的AM\U PM字段编号,指示小时是否为
中午之前或之后
在任何情况下,请花时间参考使用Joda time 2.3的一些示例代码 使用默认时区,我们创建一个now(当前时刻)的
DateTime
实例,返回到上个月(以一种智能的方式,补偿像二月这样的短月份),通过请求“最小值”获取月初,然后获取该月初一天的第一个时刻
org.joda.time.DateTime startOfPreviousMonth = new org.joda.time.DateTime().minusMonths(1).dayOfMonth().withMinimumValue().withTimeAtStartOfDay();
注意方法和timeatstartofday
以获取一天中的第一个时刻。这一时刻可能是也可能不是当地时间的00:00:00(因为夏令时或其他异常情况)
使用明确的时区(几乎总是更好的做法)
获取字符串
String string = startOfPreviousMonth; // or startOfPreviousMonth.toString();
要转换回java.util.Date实例以便与其他库通信
java.util.Date date = startOfPreviousMonth.toDate();
一些使用Joda Time 2.3的示例代码 使用默认时区,我们创建一个now(当前时刻)的
DateTime
实例,返回到上个月(以一种智能的方式,补偿像二月这样的短月份),通过请求“最小值”获取月初,然后获取该月初一天的第一个时刻
org.joda.time.DateTime startOfPreviousMonth = new org.joda.time.DateTime().minusMonths(1).dayOfMonth().withMinimumValue().withTimeAtStartOfDay();
注意方法和timeatstartofday
以获取一天中的第一个时刻。这一时刻可能是也可能不是当地时间的00:00:00(因为夏令时或其他异常情况)
使用明确的时区(几乎总是更好的做法)
获取字符串
String string = startOfPreviousMonth; // or startOfPreviousMonth.toString();
要转换回java.util.Date实例以便与其他库通信
java.util.Date date = startOfPreviousMonth.toDate();
据我所知,Joda time比Calendar更容易使用。据我所知,JodaTime功能更强大,对于不熟悉API的人来说,它让人困惑——这并不是不使用它的借口,我只是不会说它“更容易”—IMHO;)据我所知,Joda time比Calendar更容易使用。据我所知,JodaTime功能更强大,对于不熟悉API的人来说,它让人困惑——这并不是不使用它的借口,我只是不会说它“更容易”—IMHO;)以下更改已生效:aCalendar.set(Calendar.AM\u PM,Calendar.AM);aCalendar.set(Calendar.HOUR,aCalendar.getActualMinimum(Calendar.HOUR/u DAY));这是一个很好的更改:p以下更改有效:aCalendar.set(Calendar.AM\u PM,Calendar.AM);aCalendar.set(Calendar.HOUR,aCalendar.getActualMinimum(Calendar.HOUR/u DAY));这是一个很好的改变:P