我正在尝试制作一个简单的时间表而且卡住了。我只想显示2天(finalDayEnd
和initialDayEnd
)之间的月份。
我已通过会话变量获取日期。
示例:我们说initialDayEnd
是04/10/2017而finalDayEnd
是01/01/2018
我的月份标记应显示2017年10月,11月,12月和2018年1月。 在这种情况下,我需要在10月开始表格,而不是10月份的1天和2018年1月的01日结束。
如何获取2个日期之间的月份和年份以及如何从initialDay的最初日期和结束日期开始。
<div class="row" style="margin-top: 30px;">
<div class="tab-content">
<div id="Individual" class="tab-pane fade in active">
<div class="col-md-6">
<div class="row">
<%
String initialDayEnd = session.getAttribute("initialDayEnd").toString();
String finalDayEnd = session.getAttribute("finalDayEnd").toString();
%>
<div class="dropdown">
<label>Month:</label>
<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">January
<span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#">January</a></li>
<li><a href="#">February</a></li>
<li><a href="#">March</a></li>
</ul>
</div>
</div>
<div class="row" style="margin-top: 10px;">
<div class="dropdown">
<label>Year:</label>
<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">2017
<span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#">2017</a></li>
<li><a href="#">2018</a></li>
<li><a href="#">2019</a></li>
</ul>
</div>
</div>
</div>
<div class="col-md-6">
</div>
</div>
</div>
</div>
<div class="row" style="margin-top: 30px;">
<div class="table-responsive">
<%
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat ft = new SimpleDateFormat("EEEE", Locale.ENGLISH);
LocalDate localDate = LocalDate.of(2017,1,19);
int days = localDate.lengthOfMonth();
Date date;
%>
<table class="table">
<thead>
<tr>
<th class="text-center">#</th>
<th class="text-center">Day</th>
<th class="text-center">Number of Clients</th>
<th class="text-center"></th>
</tr>
</thead>
<tbody>
<%
for(int day = 1;day<=days;day++) {
date = sdf.parse(day+"/10/2017");
%>
<tr class="text-center">
<td><%=day%></td>
<td><%=ft.format(date)%></td>
<td><input name="amountOfClients[]" type="number"></td>
<td>
<%
if(day == 1) {
%>
<input type="checkbox" <%--<%= environment.isPaused() ? "checked='checked'" : ""%>--%> data-toggle="toggle" data-size="small" value="Repeat">
<label> Repeat for All?</label>
<%
}
%>
</td>
</tr>
<%
}
%>
</tbody>
</table>
</div>
</div>
答案 0 :(得分:0)
您应该做的第一件事是将这些字符串值转换为实际日期值,这将使任何数学更多更容易。像这样:
DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
Date startDate = format.parse(initialDayEnd);
Date endDate = format.parse(finalDayEnd);
从那里你可以使用从一个日期到下一个日期的循环,按月递增,并将月份的名称添加到ArrayList
。举个简单的例子:
ArrayList<String> months = new ArrayList<String>();
while (startDate.before(endDate)) {
months.add(new DateFormatSymbols().getMonths()[startDate.getMonth()]);
startDate.setMonth(startDate.getMonth() + 1);
}
之后,months
列表将包含开始日期和结束日期之间所有月份的名称。
(注意:我在getMonth()
和setMonth()
上收到了弃用警告。似乎有使用Calendar
对象的更新版本,我对此不熟悉。我的Java特定知识有点陈旧,但无论使用何种对象,概念仍然相同。)