从Java FX中获取给定日期的周数
我有一个javafx.scene.control.DatePicker。 我想从所选日期中提取(区域设置)周数。 到目前为止,我还没有找到解决方案,我不想编写自己的算法。 我使用Java8并希望它可以在新的java时间库中使用。
Java-8解决方案可以使用日期选择器的值来考虑一周的本地定义:
LocalDate date = datePicker.getValue(); // input from your date picker Locale locale = Locale.US; int weekOfYear = date.get(WeekFields.of(locale).weekOfWeekBasedYear());
另外请记住,流行的替代Joda-Time不支持这样的本地化周年字段。 例如:在ISO-8601(广泛使用)中,本周从周一开始,在美国周日开始。 此外,在给定日历年中第一周开始的项目取决于区域设置。
您可以使用http://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#get-java.time.temporal.TemporalField-
LocalDate localDate = LocalDate.of(2014, 9, 18); // assuming we picked 18 September 2014 int weekNumber = localDate.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR);
这将根据ISO惯例为您提供周数。
对于基于区域设置的评估:
LocalDate localDate = LocalDate.of(2014, 9, 18); // assuming we picked 18 September 2014 WeekFields weekFields = WeekFields.of(Locale.US); int weekNumber = localDate.get(weekFields.weekOfWeekBasedYear());
FX DatePicker基于新的(到jdk8)日期/时间api-时间学习如何使用它(不完全确定我找到了最短的方式,但是 – 更正欢迎:-)
选择器的值是LocalDate,可以查询某些TemporalField。 WeekFields类提供了与语言环境相关的与周相关的字段,fi weekOfYear:
DatePicker picker = new DatePicker(); picker.valueProperty().addListener((p, oldValue, newValue) -> { if (newValue == null) return; WeekFields fields = WeekFields.of(Locale.getDefault()); // # may range from 0 ... 54 without overlapping the boundaries of calendar year int week = newValue.get(fields.weekOfYear()); // # may range from 1 ... 53 with overlapping int weekBased = newValue.get(fields.weekOfWeekBasedYear()); LOG.info("week/Based " + week + "/" + weekBased); });
要查看差异,请选择2012年1月的fi(在星期一开始一周的区域设置)。 实际使用哪一个取决于上下文 – 选择器本身使用weekOfYear(如果启用了showWeekNumbers)
你也可以使用DateTimeFormatter,对我来说更容易:
LocalDate date = LocalDate.now(); DateTimeFormatter dtf = DateTimeFormatter.ofPattern("w"); int week = Integer.parseInt(date.format(dtf));
- Apache Helix vs YARN
- 绘制PointPlacemarks的顺序
- 将数据从servlet发送到applet:我该如何实现?
- 使用一个连接样式选择执行两个Java PreparedStatements
- 在java中使用jackson json反序列化时忽略缺少的属性
- IntelliJ IDEA:Build Project上的StackOverflowError
- 线程“main”中的exceptionjava.lang.UnsatisfiedLinkError:java.library.path中没有opencv_java249
- 跨群集共享Java同步块,还是使用全局锁?
- 显示RTP MJPEG