- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我见过的所有日历 View 库和基于日历的日期选择器的示例都使用旧的日历 API。但是,我还没有发现任何使用 Java 8 日期 API 来构建日历 View 的工具。这是我正在努力实现并且基本上已经完成的事情,但我遇到的问题是使用语言环境设置一周的第一天。
我已经设法获取并显示给定月份一周中每一天的所有日期。但是,我遇到的问题是生成的日历不是根据我的语言环境从一周的第一天开始的。 DayOfWeek Java.Time 使用的枚举,从星期一到星期日(1 - 7)开始计算天数。但是,我希望日历按地区显示日期,在我的例子中是周日到周六。
根据文档,WeekFields类提供了基于语言环境的星期几的访问权限,具有“正确”的值,但我不确定如何正确使用它。
这是我到目前为止所做的:
private enum class DaysOfWeek {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}
fun TimetableCalendar() {
val dates = getDaysOfMonth(LocalDate.now().year, LocalDate.now().month)
// WORK AROUND: Hardcoding the first day of the week by manually inserting them into a new map
val tempDates = hashMapOf<DaysOfWeek, MutableList<LocalDate>>()
tempDates[DaysOfWeek.SUNDAY] = dates[DayOfWeek.SUNDAY] !!
tempDates[DaysOfWeek.MONDAY] = dates[DayOfWeek.MONDAY] !!
tempDates[DaysOfWeek.TUESDAY] = dates[DayOfWeek.TUESDAY] !!
tempDates[DaysOfWeek.WEDNESDAY] = dates[DayOfWeek.WEDNESDAY] !!
tempDates[DaysOfWeek.THURSDAY] = dates[DayOfWeek.THURSDAY] !!
tempDates[DaysOfWeek.FRIDAY] = dates[DayOfWeek.FRIDAY] !!
tempDates[DaysOfWeek.SATURDAY] = dates[DayOfWeek.SATURDAY] !!
// Sort the days by ordinal, 0 - 6
val sortedDates = tempDates.toSortedMap(compareBy {
d -> d.ordinal
})
LazyVerticalGrid(
cells = GridCells.Fixed(7),
contentPadding = PaddingValues(16. dp)
) {
// Display short day of week name
items(sortedDates.keys.toList()) { dayOfWeek ->
Text(text = dayOfWeek.name.substring(0, 3), textAlign = TextAlign.Center)
}
itemsIndexed(sortedDates.values.toList()) { _, date ->
Column(
modifier = Modifier.padding(4. dp)
) {
date.forEach { day ->
DateView(date = day.dayOfMonth.toString())
}
}
}
}
}
/**
* Returns the dates for each day of the week in the given [year] and [month]
* Including dates of the previous and next month if the [month] does not
* begin on the first or last day of the week
*/
fun getDaysOfMonth(year: Int, month: Month): HashMap<DayOfWeek, MutableList<LocalDate>> {
val weekFields = WeekFields.of(Locale.getDefault())
val daysOfWeek = mutableSetOf<DayOfWeek>()
daysOfWeek.add(DayOfWeek.SUNDAY)
daysOfWeek.add(DayOfWeek.MONDAY)
daysOfWeek.add(DayOfWeek.TUESDAY)
daysOfWeek.add(DayOfWeek.WEDNESDAY)
daysOfWeek.add(DayOfWeek.THURSDAY)
daysOfWeek.add(DayOfWeek.FRIDAY)
daysOfWeek.add(DayOfWeek.SATURDAY)
val ym = YearMonth.of(year, month)
val firstOfMonth = ym.atDay(1) // first day of the month
val lastDayOfMonth = ym.atDay(ym.lengthOfMonth())
val dayDates = hashMapOf<DayOfWeek, MutableList<LocalDate>>()
// Get all the dates for each day of the week
daysOfWeek.forEach { day ->
val dates = mutableListOf<LocalDate>()
var ld = firstOfMonth.with(TemporalAdjusters.dayOfWeekInMonth(1, day))
do {
dates.add(ld)
ld = ld.plusWeeks(1)
} while (YearMonth.from(ld).equals(ym))
dayDates[day] = dates
}
// If current month does not start on a Sunday, get the last few days of the previous month
if (firstOfMonth.dayOfWeek != weekFields.firstDayOfWeek) {
val previousMonth = YearMonth.of(year, month.minus(1))
var lastDateOfPrevMonth = LocalDate.of(year, previousMonth.month, previousMonth.atEndOfMonth().dayOfMonth)
do {
dayDates[lastDateOfPrevMonth.dayOfWeek]?.add(0, lastDateOfPrevMonth)
lastDateOfPrevMonth = lastDateOfPrevMonth.minusDays(1)
} while (lastDateOfPrevMonth.dayOfWeek != DayOfWeek.SATURDAY)
}
// If current month does not end on a saturday, get the first few days of the next month
if (lastDayOfMonth.dayOfWeek != weekFields.firstDayOfWeek.minus(1)) {
val nextMonth = YearMonth.of(year, month.plus(1))
var firstDateOfNextMonth = LocalDate.of(year, nextMonth.month, 1)
do {
dayDates[firstDateOfNextMonth.dayOfWeek]?.add(firstDateOfNextMonth)
firstDateOfNextMonth = firstDateOfNextMonth.plusDays(1)
} while (firstDateOfNextMonth.dayOfWeek != DayOfWeek.SUNDAY)
}
return dayDates
}
上面的代码按预期工作,并显示一个从星期日开始的星期的日历。正如我所做的那样,使用从星期日开始的新枚举手动将星期几插入新的 HashMap 中是否有意义?还是让日期 api 处理它(如果可能)以及如何处理它更有意义?
还是我只是采取了错误的方法,而日历 API 会是更好的选择?
最佳答案
您是完全正确的:要正确地为某个语言环境对一周中的日子进行排序,也就是说,根据该语言环境,一周中的第一天是一周的第一天,您需要使用适当的 WeekFields
对象。下面的 Java 方法只是一个简短的演示:
public static void sortAndPrintDaysOfWeek(Locale loc) {
List<DayOfWeek> daysOfTheWeek = Arrays.asList(DayOfWeek.values());
WeekFields wf = WeekFields.of(loc);
daysOfTheWeek.sort(Comparator.comparingInt(dow -> dow.get(wf.dayOfWeek())));
System.out.println(daysOfTheWeek);
}
我相信您可以将类似的比较器应用于您的 Kotlin 排序映射。试试上面的方法:
sortAndPrintDaysOfWeek(Locale.FRANCE);
输出:
[MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY]
sortAndPrintDaysOfWeek(Locale.US);
[SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY]
sortAndPrintDaysOfWeek(Locale.forLanguageTag("ar-EG"));
[SATURDAY, SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY]
关于java - 使用 java.time/Java-8 根据语言环境从一周的第一天开始打印日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69067704/
我想知道是否有一种简单的方法可以为网站制作自上而下的列表日历。我不想使用谷歌日历。我还希望日历像接下来的 5 个事件一样显示并隐藏其余事件,直到显示的 5 个事件已经发生。如果有办法用 jquery
我使用的是 Drupal 日历,它在除 IE7 之外的所有浏览器中都运行良好。在 IE7 中,不会呈现单个日历条目。 奇怪的是,如果页面加载缓慢,那么正确着色的表格单元格会出现然后消失。 这是我尝试过
我已经广泛使用了原型(prototype),并且不想添加像 YUI 这样的额外框架。 我需要一个 JavaScript 日历,它使我能够逐个单元格地自定义日历单元格的呈现。 (用于渲染特定日期的事件、
通过 Google API 浏览器,我可以使用日历 ID 访问我的公共(public)日历事件列表。所以我知道这是对的 https://developers.google.com/google-app
我是 CakePHP 的新手,想使用这个框架创建一个日历。我遇到了困难,想知道是否有关于如何使用 CakePHP 创建简单日历的教程或指南? 最佳答案 这里有两个链接:LINK1 (日历助手)和 LI
我正在寻找一个与 jquery week calendar 具有相同功能的 jquery 日历 我浏览了某些日历,但它们不包含jquery周日历的资源 这可能是一个愚蠢的问题,但我可以修改jquery
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我想问一下我是否可以将日历“移动”到页面的右侧?因为我意识到它只能显示在左手边。我真的不知道如何将它“移动”到右侧...我也不知道如何放入 css 来做到这一点。 这是制作日历的代码... //
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在构建一个月份列表,用作 JSP 中表格的标题。 我正在做的是比较我从数据库中获得的月份,并一直迭代或“尝试”到那个月。在这种情况下,月份是 11 月 问题是我只能从 2012 年 10 月到 2
我将开发一个支持多种语言的日历解决方案,但我不确定应该如何根据各个国家/地区的用户需要来管理和显示所有不同的假期信息? 有没有地方提供世界假期信息,以便我可以解析和显示?如果没有,您会推荐更好的开发方
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我试图让我的应用程序隐藏周末,我的日历存储在一个字符串中,然后打印到innerHTML。我该如何隐藏周六和周日。 我的日历打印如下: 周日周一周二周三周四周五周六 代码: calendarString
日历有可能从星期一开始吗?我在教程中找到了这个,但我的 JS 知识还不够。我改变了一些值但没有成功。 function Calendar(id, year, month) { var elem
我正在创建一个使用 iCal 格式日历的应用程序,很可能由 Google 存储在 Google 日历中。 实现这一目标的最佳方法是什么?我真的不想在 iOS 日历应用程序中导入我的日历。 我应该解决重
在应用程序中,我使用星期几来打开成就。 let date = Date() let dateFormatter = DateFormatter() dateFormatter.dateFormat =
我正在尝试在java中为日历对象设置自定义日期和时间。我必须创建一个比当前日期多 1 天的日期,并且时间应设置为“X”(例如 05:00:00)。 这是我到目前为止所做的: Calendar tomo
while (r.next()) { String rn = r.getString(3); String sqldate = r.getString(2); // database
我有一个日历,其中突出显示了一些日期 它工作得很好,直到我想突出显示 2013 年 3 月 31 日之后的日期。此后日期就正常显示。 有人知道为什么会这样吗? 这是我用来突出显示日期的代码 //
关于报警管理器的问题我有这个代码 Calendar cal = Calendar.getInstance(); cal.add(Calendar.SECOND, 5); Intege
我是一名优秀的程序员,十分优秀!