嘿,我正在使用android时间获取我的健康数据,我正确地获得了第一个星期和一个月的日期 但我没有一天的开始时间我就得到这样的输出
start: Thu, 1 Feb 2019 18:30:00 UTC 6:30 pm EndSun, 31 Mar 2019 12:47:15 UTC 12:47 pm
我想在那里
enter code here
start: Thu, 1 Feb 2019 00:00:00 UTC 00:00 pm End Sun, 31 Mar 2019 23:59:59 UTC 11:59 pm
使用该功能获取星期和月份的时间
public static long getStartTimeOfWeek() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.DAY_OF_WEEK, 1);
return cal.getTimeInMillis()+ ONE_DAY;
}
一个月:
public static long getMonthDateFirstdate(){
Calendar cal = Calendar.getInstance();
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);
cal.set(Calendar.DATE,cal.getActualMinimum(Calendar.DAY_OF_MONTH));
return cal.getTimeInMillis();
}
答案 0 :(得分:0)
尝试一下:
drwxrwxrwx 2 root root 4096 Mar 19 14:42 mytest
答案 1 :(得分:0)
尝试SimpleDateFormat sdf = new SimpleDateFormat(“ dd-MM-yyyy hh:mm:ss”)
答案 2 :(得分:0)
我建议以下两种方法的实现。
public static long getStartTimeOfWeek() {
WeekFields wf = WeekFields.of(Locale.getDefault());
return LocalDate.now(ZoneOffset.UTC)
.with(wf.dayOfWeek(), 1)
.atStartOfDay(ZoneOffset.UTC)
.toInstant()
.toEpochMilli();
}
public static long getMonthDateFirstdate(){
return YearMonth.now(ZoneOffset.UTC)
.atDay(1)
.atStartOfDay(ZoneOffset.UTC)
.toInstant()
.toEpochMilli();
}
尝试一下:
System.out.println(Instant.ofEpochMilli(getStartTimeOfWeek()));
System.out.println(Instant.ofEpochMilli(getMonthDateFirstdate()));
当我刚在计算机上运行这两行时,我得到了:
2019-03-18T00:00:00Z 2019-03-01T00:00:00Z
由于您的预期输出和观察到的输出都提到了UTC,因此我假设您希望使用UTC进行操作。而且由于星期一是我所在地区的一周的第一天,因此第一行是3月18日,星期一。
我建议您避免使用Calendar
类。该类的设计很差,而且已经过时,因此对于像您这样的琐碎的日期和时间操作来说,它是一个糟糕的工具。相反,我使用的是java.time,这是现代的Java日期和时间API。它为您的工作提供了更好的支持,并且通常也更易于使用。
由于您没有提供完整的示例,并且代码的行为取决于时区和语言环境,因此我们还不清楚为什么会得到结果。潜在的问题包括:
18:30:00 UTC 6:30 pm
的可能原因是您在UTC偏移+05:30的时区中运行了代码,例如Asia / Kolkata或Asia / Colombo。您已在该时区开始工作。与世界标准时间前一天的18:30处于同一时间点。12:47:15 UTC 12:47 pm
看起来很奇怪。它可能来自常量ONE_DAY
的值不正确。cal.set(Calendar.DAY_OF_WEEK, 1);
将星期几设置为1 =星期日(如果我正确地记住了这些常量,我不确定),但是在某些语言环境中将选择前一个星期日,在其他语言环境中将选择下一个星期日,在其他地区,则根据当前星期几而有所不同。getMonthDateFirstdate
中忘记设置一天中的时间。通过Calendar
类,您很容易忘记,您必须在其中单独设置每个字段(记住的时间很毫秒,很多人忘记了)。Sun, 31 Mar 2019 23:59:59 UTC 11:59 pm
,而建议将其设置为Mon, 01 Apr 2019 00:00:00 UTC 12:00 am
并将其用作开放端点,即,您的间隔是从开始时间 到结束时间专有。因此,这意味着某个时间点只有在结束时间严格之前,才在时间间隔内。是的,java.time
在较新的Android设备上都能很好地工作。它只需要至少 Java 6 。
org.threeten.bp
和子包中导入日期和时间类。java.time
。