选择Start-LocalDateTime后,JavaFX会自动设置End-LocalDateTime

时间:2017-06-25 19:46:14

标签: java javafx time localdate

我想为日期值上瘾的某些数据创建一个小的GUI。所以我在JavaFX中使用<link href="something.domain.name/thing">。所以我将使用以下代码获得所选时间:

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);
  

开始时间:2017-03-08 00:00
  恩德:2017-03-08 23:59

https://www.reddit.com/r/screeps/comments/6jfjob/locations_not_valid_when_stored_in_memory/djdzgn1/

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

是否有解决方案,自动生成给定的终结时间,例如在选择的开始时间后1小时?因此,编辑“时代”的“工作”较少,最好只选择一个日期。

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

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

但现在我知道,我的问题不正确,因为我仍然希望更改应用程序中的Enddate 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"); 。但是没有机会,因为它固定在tend之后的23:59:59h。但我的想法是将tbegin设置为日期并自动将tbegin设置为23:59:59h之后,但也可能更改为10:00:00h之后。但也许我必须创建一个按钮,它执行这些临时步骤。所以要理解,我想要什么,这里有一些图片:

Choosen Time

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

2 个答案:

答案 0 :(得分:3)

也许我误解了这个问题,但是只要MATCH (s1:Station)-[mode:TAXI|BUS|SCHIFF]-(neighbour) WITH s1, TYPE(mode) as mode, COLLECT(DISTINCT neighbour) as neighbours WITH s1, CASE WHEN mode = 'TAXI' THEN size(neighbours) END AS AnzTaxi, CASE WHEN mode = 'BUS' THEN size(neighbours) END AS AnzBus, CASE WHEN mode = 'SCHIFF' THEN size(neighbours) END AS AnzSchiff RETURN s1.id, SUM(AnzTaxi) as AnzTaxi, SUM(AnzBus) AS AnzBus, SUM(AnzSchiff) AS AnzSchiff ORDER BY AnzTaxi DESC, s1.id 发生变化,你就不能致电tend.setLocalDateTime(...)吗?

tbegin.localDateTimeProperty()

另外,您不应该依赖字符串表示来从对象中提取数据。如果tbegin.localDateTimeProperty().addListener((obs, oldTime, newTime) -> tend.setLocalDateTime(newTime.plusHours(1))); 方法的实现发生更改,您的代码将会中断。您还应该使用格式设置API将日期和时间转换为字符串,而不是依赖toString()。你应该这样做,例如:

toString

答案 1 :(得分:1)

要在1小时后获得LocalDateTime,请使用plusHours方法:

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

对于其他情况,您无需使用replacesubstring。只需使用格式化程序:

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年6月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));

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