- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在日历项目中工作并使用这个 Github 项目: https://github.com/wdullaer/MaterialDateTimePicker
我的日历可以正常工作,但我的要求是禁用所有工作日并仅启用周六和周日。
该库具有 datepickerdialog.setDisabledDays()
功能,我们必须在其中传递 Calendar[]
。
如果我将 Calendar.Monday
添加到数组(返回 int
值),它会抛出类似
setDisabledDays (java.util.Calendar[]) in DatePickerDialog cannot be applied to (int)
我主要尝试做的是,将所有工作日添加到 Calendar
数组中以禁用它们。那么,如何将 int
值转换为 Java 中的 Calendar
呢?
最佳答案
Yes @OleV.V. Any idea on how to do it?
是也不是。我会使用 ZonedDateTime
进行计算,这在您的 Android Java 7 中并不容易使用。如果您要在应用程序中使用日期和/或时间做更多工作和/或您预见维护在未来几年,您应该考虑使用 ThreeTen ABP 库。这为您提供了 JSR-310 中描述的日期和时间类。这些是用于 2017 年日期和时间的选项。另外,由于 Stack Overflow 应该是一个知识库,我将首先介绍这个选项,然后再介绍没有 JSR-310 的选项。
您询问要将什么传递给 setDisabledDays()
。当我阅读您的链接时,您需要传递一个数组,其中包含不允许用户选择的所有日期。原则上是无限多天。因此,您首先需要确定用户真正需要选择一天到过去和/或 future 多长时间。然后强制用户在你的限制内,这样你就可以控制选择。接下来我觉得通过setSelectableDays
来控制会容易很多。这将同时控制边界和星期几,并且星期六和星期日比工作日少,因此您需要一个更短的数组。
编辑:在我下面的代码中,我假设用户必须在 1 年 6 个月前到 future 1 个月的时间范围内选择星期六或星期日。我相信你会为你设定正确的界限。
// start 1 year 6 months before today
// please change to the number of years, months, weeks and/or days you require
ZonedDateTime start = ZonedDateTime.now(ZoneId.systemDefault()).minusYears(1).minusMonths(6);
// end 1 month after today - also change to your own requirements
ZonedDateTime end = ZonedDateTime.now(ZoneId.systemDefault()).plusMonths(1);
List<Calendar> satsAndSuns = new ArrayList<>(200);
ZonedDateTime current = start;
if (current.getDayOfWeek().equals(DayOfWeek.SUNDAY)) {
satsAndSuns.add(GregorianCalendar.from(current));
}
current = current.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY));
while (! current.isAfter(end)) {
satsAndSuns.add(GregorianCalendar.from(current));
// add 1 day to get Sunday
current = current.plusDays(1);
assert current.getDayOfWeek().equals(DayOfWeek.SUNDAY);
if (current.isAfter(end)) {
break;
}
satsAndSuns.add(GregorianCalendar.from(current));
// add 6 days to get Saturday
current = current.plusDays(6);
assert current.getDayOfWeek().equals(DayOfWeek.SATURDAY);
}
Calendar[] selecatbleDays = satsAndSuns.toArray(new Calendar[satsAndSuns.size()]);
编辑:我使用 GregorianCalendar.from(current)
将 ZonedDateTime
转换为 MaterialDateTimePicker 需要的 Calendar
对象。 Android 上没有此方法。根据the docs感谢 Basil Bourque,您应该改为使用 DateTimeUtils.toGregorianCalendar(current)
。
今天在我的计算机上运行上面的代码 fragment 生成了一个包含 165 个 Calendar
对象的数组,所有星期六和星期日。
如果您不想依赖 ThreeTen ABP,请使用此解决方案。使用的算法与上面相同,只是细节不同:
Calendar end = new GregorianCalendar(TimeZone.getDefault());
end.add(Calendar.MONTH, 1);
List<Calendar> satsAndSuns = new ArrayList<>(200);
// start 1 year 6 months before today
Calendar current = new GregorianCalendar(TimeZone.getDefault());
current.add(Calendar.YEAR, -1);
current.add(Calendar.MONTH, -6);
if (current.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
// we need to add a copy because we will continue to modify current
// I really don’t like using clone(), but it’s the simplest way
satsAndSuns.add((Calendar) current.clone());
}
// Set current to next saturday
// This is where Calendar is not so straightforward as ZonedDateTime
// Subtraction of day of week works because in Calendar, Saturday is the last day of the week
current.add(Calendar.DATE, Calendar.SATURDAY - current.get(Calendar.DAY_OF_WEEK));
assert current.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY;
while (! current.after(end)) {
satsAndSuns.add((Calendar) current.clone());
current.add(Calendar.DATE, 1);
assert current.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY;
if (current.after(end)) {
break;
}
satsAndSuns.add((Calendar) current.clone());
current.add(Calendar.DATE, 6);
assert current.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY;
}
Calendar[] selecatbleDays = satsAndSuns.toArray(new Calendar[satsAndSuns.size()]);
.equals()
或 ==
与枚举?编辑:这实际上不是问题的一部分,但现在我们开始讨论它:我首先使用 current.getDayOfWeek() == DayOfWeek.SUNDAY
因为我发现它更简单一些读取比 .equals()
。它之所以有效,是因为 DayOfWeek
是一个枚举,而 JVM 保证每个枚举常量只有一个实例。请在评论中找到异议。 Basil Bourque 在教导年轻程序员首先也是最重要的一点是使用 .equals()
来比较对象的身份。许多人花了很长时间来寻找由在字符串或其他对象之间使用 ==
引起的错误。
关于java - 转换为 Calendar 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43981023/
我正在尝试将一个字符串逐个字符地复制到另一个字符串中。目的不是复制整个字符串,而是复制其中的一部分(我稍后会为此做一些条件......) 但我不知道如何使用迭代器。 你能帮帮我吗? std::stri
我想将 void 指针转换为结构引用。 结构的最小示例: #include "Interface.h" class Foo { public: Foo() : mAddress((uint
这有点烦人:我有一个 div,它从窗口的左上角开始过渡,即使它位于文档的其他任何位置。我试过 usign -webkit-transform-origin 但没有成功,也许我用错了。有人可以帮助我吗?
假设,如果将 CSS3 转换/转换/动画分配给 DOM 元素,我是否可以检测到该过程的状态? 我想这样做的原因是因为我正在寻找类似过渡链的东西,例如,在前一个过渡之后运行一个过渡。 最佳答案 我在 h
最近我遇到了“不稳定”屏幕,这很可能是由 CSS 转换引起的。事实上,它只发生在 Chrome 浏览器 上(可能还有 Safari,因为一些人也报告了它)。知道如何让它看起来光滑吗?此外,您可能会注意
我正在开发一个简单的 slider ,它使用 CSS 过渡来为幻灯片设置动画。我用一些基本样式和一些 javascript 创建了一支笔 here .注意:由于 Codepen 使用 Prefixfr
我正在使用以下代码返回 IList: public IList FindCodesByCountry(string country) { var query =
如何设计像这样的操作: 计算 转化 翻译 例如:从“EUR”转换为“CNY”金额“100”。 这是 /convert?from=EUR&to=CNY&amount=100 RESTful 吗? 最佳答
我使用 jquery 组合了一个图像滚动器,如下所示 function rotateImages(whichHolder, start) { var images = $('#' +which
如何使用 CSS (-moz-transform) 更改一个如下所示的 div: 最佳答案 你可以看看Mozilla Developer Center .甚至还有例子。 但是,在我看来,您的具体示例不
我需要帮助我正在尝试在选中和未选中的汉堡菜单上实现动画。我能够为菜单设置动画,但我不知道如何在转换为 0 时为左菜单动画设置动画 &__menu { transform: translateX(
我正在为字典格式之间的转换而苦苦挣扎:我正在尝试将下面的项目数组转换为下面的结果数组。本质上是通过在项目第一个元素中查找重复项,然后仅在第一个参数不同时才将文件添加到结果集中。 var items:[
如果我有两个定义相同的结构,那么在它们之间进行转换的最佳方式是什么? struct A { int i; float f; }; struct B { int i; float f; }; void
我编写了一个 javascript 代码,可以将视口(viewport)从一个链接滑动到另一个链接。基本上一切正常,你怎么能在那里看到http://jsfiddle.net/DruwJ/8/ 我现在的
我需要将文件上传到 meteor ,对其进行一些图像处理(必要时进行图像转换,从图像生成缩略图),然后将其存储在外部图像存储服务器(s3)中。这应该尽可能快。 您对 nodejs 图像处理库有什么建议
刚开始接触KDB+,有一些问题很难从Q for Mortals中得到。 说,这里 http://code.kx.com/wiki/JB:QforMortals2/casting_and_enumera
我在这里的一个项目中使用 JSF 1.2 和 IceFaces 1.8。 我有一个页面,它基本上是一大堆浮点数字段的大编辑网格。这是通过 inputText 实现的页面上的字段指向具有原始值的值对象
ScnMatrix4 是一个 4x4 矩阵。我的问题是什么矩阵行对应于位置(ScnVector3),旋转(ScnVector4),比例(ScnVector3)。第 4 行是空的吗? 编辑: 我玩弄了
恐怕我是 Scala 新手: 我正在尝试根据一些简单的逻辑将 Map 转换为新 Map: val postVals = Map("test" -> "testing1", "test2" -> "te
输入: This is sample 1 This is sample 2 输出: ~COLOR~[Green]This is sample 1~COLOR~[Red]This is sam
我是一名优秀的程序员,十分优秀!