当前位置: 首页 > 知识库问答 >
问题:

JavaFX在选择Start LocalDateTime后设置自动结束LocalDateTime

赵永新
2023-03-14

我想为日期值中的一些数据创建一个小型GUI。因此,我正在使用JavaFX中的LocalDateTimeTextField。因此,我将使用以下代码获得所选时间:

LocalDateTimeTextField tend;
LocalDateTimeTextField tbegin;

String en = tend.getLocalDateTime().withSecond(0).toString();
String ende = en.replaceAll("T", " ");
String endezeit = ende.substring(11, 16);
String be = tbegin.getLocalDateTime().withSecond(0).toString();
String begin = be.replaceAll("T", " ");
String beginzeit = begin.substring(11, 16);
String datum = begin.substring(0, 10);

作为输出,我将得到:

System.out.println("Beginn:    "+datum + " " + beginzeit);
System.out.println("Ende:      "+datum + " " + endezeit);

开始:2017-03-08 00:00
结束:2017-03-08 23:59

因此,为了获得开始和结束的时间,我必须手动选择这两个日期。

有没有一个解决方案,自动生成给定的结束时间,例如1小时后选择的开始时间?这样我编辑泰晤士报的“工作”就少了,最好的情况下只需选择一个日期。

谢谢你的建议!他们工作得很好:)

    LocalDateTime timebegin = tbegin.getLocalDateTime().withSecond(0);
    LocalDateTime timeend = timebegin.plusHours(23).plusMinutes(59).plusSeconds(59);
    LocalDate datum = timebegin.toLocalDate();
    LocalTime start = timebegin.toLocalTime().plusSeconds(0);
    LocalTime ende = timeend.toLocalTime();
    tend.setLocalDateTime(timeend);
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

但现在我知道,我的问题表达得不对,因为我仍然想更改应用程序中的EnddateTrend。但是没有机会,因为它被固定在tbegin之后的23:59:59小时。但我的想法是用日期设置tbegin,并自动将tend设置为23:59:59小时后,但也可能更改为10:00:00小时后。但也许我必须创建一个按钮,来完成这些过渡步骤。为了理解我想要的,这里有一些图片:

所以在我点击按钮之前,它应该给我一个带有结束日期的字段。应该可以将enddate编辑为其他日期/时间。

共有2个答案

曹驰
2023-03-14

若要在1小时后获取LocalDateTime,请使用plusHour方法:

LocalDateTime dt = LocalDateTime.now();
// new date 1 hour after dt
LocalDateTime newDt = dt.plusHours(1);

要控制输出格式,请使用DateTimeFormatter

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");
System.out.println(formatter.format(dt));

此代码将输出(提醒它是我时区中的当前日期/时间):

25.06.2017 17:42:50

对于其他情况,您不需要使用替换子字符串。也只需使用格式化程序:

DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("HH:mm");
DateTimeFormatter fmt2 = DateTimeFormatter.ISO_DATE;

System.out.println(fmt1.format(dt));
System.out.println(fmt2.format(dt));

产出将是:

17:42
2017-06-25

有关输出模式的更多详细信息,请检查javadoc。

当您调用timebegin.plusHours(23).plusMinutes(59).plusSeconds(59)时,您正在为日期添加句点。如果timebegin是10:00,结果将是第二天09:59:59

如果要将时间精确设置为23:59:59,应执行以下操作:

LocalDateTime timeend = timebegin.with(LocalTime.of(23, 59, 59));

这将在23:59:59设置timeend,无论timebegin中的时间是什么。

谢和颂
2023-03-14

也许我误解了这个问题,但是当tbegin.localDateTimeProperty()发生变化时,你就不能简单地调用tend.setLocalDateTime(…)

即。

tbegin.localDateTimeProperty().addListener((obs, oldTime, newTime) -> 
    tend.setLocalDateTime(newTime.plusHours(1)));

另一方面,您不应该依赖字符串表示法从对象中提取数据。如果toString()方法的实现发生更改,代码将中断。您还应该使用格式化API将日期和时间转换为字符串,而不是依赖toString。您应该这样做,例如:

LocalDateTime end = tend.getLocalDateTime();

// if you need these:
LocalDate endDate = end.toLocalDate();
LocalTime endTime = end.toLocalTime();

// to display:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm");
String stringEnd = formatter.format(end);
 类似资料:
  • 问题内容: 在我正在开发的商店中,用户只有在创建帐户后才能看到价格并将产品添加到购物车。之后,他们可以将产品添加到购物车。帐单详细信息和交付详细信息选项将自动填写用户的地址。送货方式是免费的,付款方式是“货到付款”。 我如何自动选择这些选项并隐藏它们,所以剩下的唯一步骤就是确认订单? 我假设我需要更改的模板文件是,但是它几乎是1k行,并使用了我不知道的ajax。 我已经尝试了几个小时,所以任何帮助

  • 我有一个<代码>材料数据包< /代码>,它选择了一系列数据,例如从<代码> 2021年1月1日到2021年1月31日< /代码>。 打开MaterialDatePicker时,会显示当前日期。当我尝试从2月滚动到1月时,一个月的最后一天是不可见的 要选择本月的最后一天,我应该向下滚动,但当我选择本月的最后一天时,应用程序崩溃,显示此错误: java.lang.NullPointerExcture:

  • 我想创建一些表格与自动填充价格在输入框,但我不知道如何实现到我的代码。首先我有选择选项,然后选择选项后,输入框上的价格会自动生成,然后我输入折扣值,然后总价格会自动生成(基本价格-折扣%)。这是我的代码: null null

  • 问题内容: 我想设置一个先前选择的要在页面加载时显示的选项。我用以下代码尝试了它: 与 但这是行不通的。有任何想法吗? 问题答案: 这绝对应该工作。确保已将代码放入:

  • 我有一组AL约束来定位一个子vc,它有两个位置,展开和折叠。 我发现,当我添加折叠约束时,带有常量的上锚到下锚约束,当第一次创建vc时,当我激活它时,似乎有额外的间距。似乎是因为当时没有实际的高度。 当我在viewDidLayoutSubviews中添加约束时,额外的间距消失了,约束行为正常。除了现在在动画中的约束之间切换时,切换到展开约束和约束打断时,无法停用折叠的约束。可能是因为在整个过渡动画

  • 我在viewcontroller的中央有一个UITextField(搜索字段),我正在使用UIView(liveView)创建一条细线。我以编程方式创建线视图及其约束。lineView本质上是一个下划线,当用户键入时,它在文本字段下的宽度会增加。用户按enter键后,我将调整约束,以便文本字段和视图移动到viewcontroller的顶部。我让它工作起来了,但随着线视图向上移动,它开始淡出并消失。