首先,让我引导您完成整个过程。
我想定制我制作的周历。它工作正常,但问题是当我在Samsung SM-T531和Moto G中运行相同的代码时,它将在前一周返回我。
让我用代码解释。
public WeekCalendar(Context context) {
this.mContext = context;
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.setFirstDayOfWeek(Calendar.MONDAY);
Log.e(TAG, "Formatted Current Date Before - " + format.format(calendar.getTime()));
Log.e(TAG, "Current Date Before - " + calendar.getTime());
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
Log.e(TAG, "Formatted Current Date After - " + format.format(calendar.getTime()));
Log.e(TAG, "Current Date After - " + calendar.getTime());
String[] days = new String[7];
for (int i = 0; i < 7; i++) {
days[i] = format.format(calendar.getTime());
calendar.add(Calendar.DAY_OF_MONTH, 1);
Log.e(TAG, "List days " + "" + days[i]);
}
weekDataModel.setDays(days);
weekDataModel.setCurruntdate(Utility.getCurrentDate());
}
此代码的输出
Formatted Current Date Before - 2018-04-20
Current Date Before - Fri Apr 20 15:25:58 GMT+05:30 2018
Formatted Current Date After - 2018-04-09
Current Date After - Mon Apr 09 15:25:58 GMT+05:30 2018
List days 2018-04-09
List days 2018-04-10
List days 2018-04-11
List days 2018-04-12
List days 2018-04-13
List days 2018-04-14
List days 2018-04-15
当前日期是calendar.getTime()的20-4-2018,它是正确的,但是在添加以下行当前日期之后,我不知道为什么会发生。
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
您可以在日期前后看到我的输出。
LocalDate date = LocalDate.now(ZoneId.of("Asia/Colombo"));
System.out.println(date);
WeekFields wf = WeekFields.ISO;
// set to first day of week (Monday for ISO, Sunday for USA)
date = date.with(wf.dayOfWeek(), 1);
System.out.println(date);
今天的输出:
2018-04-21
2018-04-16
如果不是亚洲/科伦坡,请填写所需的时区。
我以为您真的想在当前一周的几天内进行迭代,因此上面的代码段将日期设置为一周的第一天。我指定了ISO周,即从星期一开始的周,因此您将拥有同一周的星期一。如果您真的只是想要最近的星期一,那么使用会更正确date = date.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
。
定义一周的关键是WeekFields
对象。假设您想要从周日开始的美国周:
WeekFields wf = WeekFields.SUNDAY_START;
进行此更改后,您将获得星期日:
2018-04-21
2018-04-15
或根据设备的区域设置使用几周:
WeekFields wf = WeekFields.of(Locale.getDefault(Locale.Category.DISPLAY));
对于迭代使用LocalDate.plusDays()
:
WeekFields wf = WeekFields.ISO;
date = date.with(wf.dayOfWeek(), 1);
System.out.println(date);
LocalDate[] days = new LocalDate[7];
for (int i = 0; i < 7; i++) {
days[i] = date;
date = date.plusDays(1);
System.out.println("List days " + "" + days[i]);
}
输出:
2018-04-16
List days 2018-04-16
List days 2018-04-17
List days 2018-04-18
List days 2018-04-19
List days 2018-04-20
List days 2018-04-21
List days 2018-04-22
我正在使用并推荐java.time
现代Java日期和时间API。该Calendar
班是早已过时的,并且java.time
是与工作,以便更好。另一个优点是,LocalDate.toString()
它可以为您提供使用的日期格式,因此您不再需要显式的格式化程序(它是ISO
8601格式)。而且,如果Calendar
某些设备上的实现存在错误或类似问题,那么您显然可以摆脱这些麻烦。
是的,java.time
在较新和较旧的Android设备上均可正常运行。它至少需要Java 6 。
org.threeten.bp
带有子包的日期和时间类。java.time
。java.time
第一被描述。java.time
Java 6和7的反向移植(JSR-310的ThreeTen)。我正试图在后台获取用户位置。在我的手机(htc one m7)上一切都很好,但出于某种原因,它不能在我测试的两个设备上工作:三星galaxy s3索尼Xperia Z1 顺便说一句:我把所有东西都添加到了清单中。
我是android开发的新手。我正在从事一个项目,该项目有不同的活动,其中两个使用jSon解析。 我的问题是,即使在测试时,我的ap在一些设备上工作正常,但在一些设备上失败了。关于这个问题,我看了无数的回答,但是没有一个能解决我的问题。我也有一些其他问题,但我通过查看可用的答案解决了它们,但这个“未安装”的问题仍然是一样的。我做到了以下几点: 创建签名apk 签署了带有“发布”选项的apk 两个选
我的Android应用程序无法安装在一些“随机”、较旧的API设备上(任何低于API级别25的设备),错误如下: 所以,基本上看起来… API 我见过类似的问题,答案与小写的包名有关。我已经有了。 有人有什么想法吗? 舱单: BTW我用的是Visual Studio 2019和一夫一妻制3.7
嗨,我正在尝试开发一个具有完全透明状态栏和白色导航栏的页面。我正在使用 但是它在某些设备上不起作用。它在某些设备上显示状态栏的覆盖。不过,它在某些设备上工作正常。请帮我解决这个问题。我也尝试过设置全屏标志,但它会导致状态栏字体消失。我也使用了statusBarUtil库,但它会导致导航栏变黑。
最近,我们在Android应用程序中增加了对Chromecast的支持,但在对各种移动设备(手机和平板电脑)的扩展测试中,发现在许多移动设备上,Flipps应用程序都没有发现Chromecast。在相同的设备上,我们使用了最新版本的官方Chromecast SDK演示应用程序进行测试,该应用程序从https://github.com/googlecast/castvideo-Android下载(主
和onActivityResult 和错误的堆栈跟踪 stack_trace=java.lang.runtimeException:未能将结果ResultInfo{who=null,request=1,result=-1,data=intent{act=inline-data(havs extras)}}传递到活动{com.madhours/com.madhours.activities.acti