存储的日期时间是在当前日期之前还是之后?使用 java -Joda 时间
Stored date time is before or after the current date? using java -Joda Time
要求: 从事网络研讨会会议,用户可以通过填写表格安排会议。该表单包含主题、说明、成员列表、会议开始时间和日期。这些详细信息存储在 table 中。安排会议后,用户可以查看他的即将举行的和以前的次会议。
日期使用 DATE 数据类型以 2021-02-22 这种格式存储。
开始时间:12:48:00 这种格式。
需要查找会议日期是尚未开始还是之前的会议?
public WebinarEntity getScheduledMeeting(int CompanyID){
Date currentDate=new Date(); //Todays Date.
//get the stored data.
DAO_Factory dao=new DAOImpl();
Date storedDate=dao.getMeetingDate(CompanyID);
if(currentDate.before(storedDate)
{
//display the meeting details as previous
}
else {
//display the meeting details as upcoming!
}
return new WebinarEntity(Details of previous or upcoming);
如何编写代码以根据日期和时间查找存储的数据是即将到来的还是之前的?
上面代码中的问题: 例如我们的会议安排在 22-2-2021 4:下午 00 点 此会议的详细信息显示在 上次会议列 中,而不是 即将召开的 中的 shown/displayed。
编辑:CurrentDate-2021-02-22 08:00am
存储日期-2021-02-22 04:00pm
永远不要使用任何可怕的 Date
classes。多年前,它们被 JSR 310 中定义的现代 java.time classes 所取代。
您为 Joda-Time 项目添加了标签。但是您看不到正在使用它。该项目现在处于维护模式,也被 java.time.
取代
你的问题忽略了时区这个关键问题。
使用 LocalDateTime
和 ZoneId
进行预约,将每个预约存储在数据库中的一对列中。 SQL-standard 类型将分别为 TIMESTAMP WITHOUT TIME ZONE
和 VARCHAR
。您可能还想使用标准 ISO 8601 格式将会议持续时间存储为文本。
在运行时,当您需要制定计划时,将两者结合起来得到 ZonedDateTime
。这个 class 代表一个时刻,你可以通过与当前时刻进行比较来判断它是过去的还是未来的。要结束会议,请将您的 ISO 8601 字符串设为 Duration
object,然后添加到您的 ZonedDateTime
开头。
这个问题已经在 Stack Overflow 上解决过很多次了。我本人和其他人已经详细讨论了这个主题。所以搜索以了解更多信息。
CurrentDate-2021-02-22 08:00am
Stored Date-2021-02-22 04:00pm
LocalDateTime ldt = LocalDateTime.of( 2021 , 2 , 22 , 8 , 0 ) ; // Stored as TIMESTAMP WITHOUT TIME ZONE in database.
ZoneId z = ZoneId.of( "America/Edmonton" ) ; // Stored as text in database, in `Continent/Region` format.
ZonedDateTime start = ldt.atZone( z ) ; // Dynamically calculated, not stored.
Duration duration = Duration.parse( "PT1H30M" ) ; // Stored in database as text, in standard ISO 8601 format `PnYnMnDTnHnMnS`.
ZonedDateTime end = start.plus( duration ) ; // Dynamically calculated, not stored.
ZonedDateTime now = ZonedDateTime.now( z ) ;
boolean isFuture = start.isAfter( now ) ;
Duration untilThen = Duration.between( now , start ) ;
要求: 从事网络研讨会会议,用户可以通过填写表格安排会议。该表单包含主题、说明、成员列表、会议开始时间和日期。这些详细信息存储在 table 中。安排会议后,用户可以查看他的即将举行的和以前的次会议。
日期使用 DATE 数据类型以 2021-02-22 这种格式存储。 开始时间:12:48:00 这种格式。
需要查找会议日期是尚未开始还是之前的会议?
public WebinarEntity getScheduledMeeting(int CompanyID){
Date currentDate=new Date(); //Todays Date.
//get the stored data.
DAO_Factory dao=new DAOImpl();
Date storedDate=dao.getMeetingDate(CompanyID);
if(currentDate.before(storedDate)
{
//display the meeting details as previous
}
else {
//display the meeting details as upcoming!
}
return new WebinarEntity(Details of previous or upcoming);
如何编写代码以根据日期和时间查找存储的数据是即将到来的还是之前的?
上面代码中的问题: 例如我们的会议安排在 22-2-2021 4:下午 00 点 此会议的详细信息显示在 上次会议列 中,而不是 即将召开的 中的 shown/displayed。
编辑:CurrentDate-2021-02-22 08:00am
存储日期-2021-02-22 04:00pm
永远不要使用任何可怕的 Date
classes。多年前,它们被 JSR 310 中定义的现代 java.time classes 所取代。
您为 Joda-Time 项目添加了标签。但是您看不到正在使用它。该项目现在处于维护模式,也被 java.time.
取代你的问题忽略了时区这个关键问题。
使用 LocalDateTime
和 ZoneId
进行预约,将每个预约存储在数据库中的一对列中。 SQL-standard 类型将分别为 TIMESTAMP WITHOUT TIME ZONE
和 VARCHAR
。您可能还想使用标准 ISO 8601 格式将会议持续时间存储为文本。
在运行时,当您需要制定计划时,将两者结合起来得到 ZonedDateTime
。这个 class 代表一个时刻,你可以通过与当前时刻进行比较来判断它是过去的还是未来的。要结束会议,请将您的 ISO 8601 字符串设为 Duration
object,然后添加到您的 ZonedDateTime
开头。
这个问题已经在 Stack Overflow 上解决过很多次了。我本人和其他人已经详细讨论了这个主题。所以搜索以了解更多信息。
CurrentDate-2021-02-22 08:00am Stored Date-2021-02-22 04:00pm
LocalDateTime ldt = LocalDateTime.of( 2021 , 2 , 22 , 8 , 0 ) ; // Stored as TIMESTAMP WITHOUT TIME ZONE in database.
ZoneId z = ZoneId.of( "America/Edmonton" ) ; // Stored as text in database, in `Continent/Region` format.
ZonedDateTime start = ldt.atZone( z ) ; // Dynamically calculated, not stored.
Duration duration = Duration.parse( "PT1H30M" ) ; // Stored in database as text, in standard ISO 8601 format `PnYnMnDTnHnMnS`.
ZonedDateTime end = start.plus( duration ) ; // Dynamically calculated, not stored.
ZonedDateTime now = ZonedDateTime.now( z ) ;
boolean isFuture = start.isAfter( now ) ;
Duration untilThen = Duration.between( now , start ) ;