質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

3209閲覧

Javaでの日付計算で、フォームに入力された数値を現在日時に加算して表示させたい

sga11

総合スコア3

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2021/10/01 08:09

編集2021/10/01 08:24

前提・実現したいこと

JavaのSpringboot(Thymeleaf)などを使い、日付計算のWebアプリを作っています。

西暦⇒和暦、和暦⇒西暦の変換。
現在の日時に日数を加算し、何月何日何曜日になるのかを表示するアプリになります。

【実現したいこと】
現在日時を取得し、Web上に表示することができたので、
別の入力フォームに入力された数字を日数に加算し、

計算結果を下記に表示させる処理を行いたいです。

該当のソースコード

Java

1import java.time.LocalDateTime; 2 3import org.springframework.stereotype.Controller; 4import org.springframework.ui.Model; 5import org.springframework.web.bind.annotation.RequestMapping; 6import org.springframework.web.bind.annotation.RequestMethod; 7 8@Controller 9public class DayCountController { 10 11 @RequestMapping(value = "/daycount", method = RequestMethod.GET) 12 public String index(Model model) { 13 14 LocalDateTime years = LocalDateTime.now(); 15 16 years = years.plusDays(0); 17 18 19 //現在日時から年を取得する 20 int yearnow = years.getYear(); 21 22 //現在日時から月を取得する 23 int month = years.getMonthValue(); 24 25 ////現在日時から日を取得する 26 int day = years.getDayOfMonth(); 27 28 29 model.addAttribute("yearnow", yearnow); 30 31 model.addAttribute("monthpull", month); 32 33 model.addAttribute("daypull", day); 34 35 return "daycount"; 36 } 37}

html

1<!DOCTYPE html> 2<html xmlns="http://www.w3.org/1999/xhtml" 3 xmlns:th="http://www.thymeleaf.org"> 4<head> 5<meta charset="UTF-8"> 6<title>DayCount</title> 7</head> 8<body> 9 <h1>日付計算</h1> 10 11 <div> 12 <span> 13 <select> 14 <option value="seireki">西暦</option> 15 <option value="reiwa">令和</option> 16 <option value="heisei">平成</option> 17 <option value="syowa">昭和</option> 18 <option value="taisyo">大正</option> 19 <option value="meiji">明治</option> 20 </select> 21 </span> 22 23 <span> 24 <input type="text" th:value="${yearnow}" size=6 />25 </span> 26 27 <span><!-- 現在の「月」表示 --> 28 <select> 29 <option style ="visibility:hidden;" th:value="${monthpull}" th:text="${monthpull}" ></option> 30 <option value="1">1</option> 31 <option value="2">2</option> 32 <option value="3">3</option> 33 <option value="4">4</option> 34 <option value="5">5</option> 35 <option value="6">6</option> 36 <option value="7">7</option> 37 <option value="8">8</option> 38 <option value="9">9</option> 39 <option value="10">10</option> 40 <option value="11">11</option> 41 <option value="12">12</option> 42 </select>43 </span> 44 45 <span> <!-- 現在の「日」表示 --> 46 <select> 47 <option style ="visibility:hidden;" th:value="${daypull}" th:text="${daypull}"></option> 48 <option value="1">1</option> 49 <option value="2">2</option> 50 <option value="3">3</option> 51 <option value="4">4</option> 52 <option value="5">5</option> 53 <option value="6">6</option> 54 <option value="7">7</option> 55 <option value="8">8</option> 56 <option value="9">9</option> 57 <option value="10">10</option> 58 <option value="11">11</option> 59 <option value="12">12</option> 60 <option value="13">13</option> 61 <option value="14">14</option> 62 <option value="15">15</option> 63 <option value="16">16</option> 64 <option value="17">17</option> 65 <option value="18">18</option> 66 <option value="19">19</option> 67 <option value="20">20</option> 68 <option value="21">21</option> 69 <option value="22">22</option> 70 <option value="23">23</option> 71 <option value="24">24</option> 72 <option value="25">25</option> 73 <option value="26">26</option> 74 <option value="27">27</option> 75 <option value="28">28</option> 76 <option value="29">29</option> 77 <option value="30">30</option> 78 <option value="31">31</option> 79 </select>80 </span> 81 </div> 82 83 <div> 84 <p><!-- テキストフォームに入力された値を日数に加算したい--> 85 +日数 <input type="text" name=dayplus value="10" size=5>86 </p> 87 88 <p> 89 初日を <input type="radio" name="day">数えない 90 <input type="radio" name="day">数える 91 </p> 92 </div> 93 94 <div><!--ボタン 計算処理 --> 95 <p> 96 <input type="submit" value="計算"> 97 </p> 98 </div>

試したこと

LocalDateTimeのplusDaysを使ってみました。引数に整数を入れるだけで計算はされるのですが、フォームに直接入力された値を取得する記述方法がわかりませんでした。

あとはCalender、scannerなどが使えそうだと思うのですが、現在調べていて未だに答えにはたどりついていません。

言葉にするのも難しく、わかりずらいところも多々あるかと思いますが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/10/01 09:53

> フォームに直接入力された値を取得する記述方法がわかりませんでした。 サーバー側(Java/Spring)でやるのか、クライアント側(ブラウザ)でやるのかで変わってくるのでは?  どちらでやろうとしているのかご質問からはちょっと分かりづらいようです。
sga11

2021/10/01 14:32

コメントありがとうございます。 確かにこれだとどちらかわからないですね、、、 ブラウザで表示する予定で作成しております。
dodox86

2021/10/01 15:45

ブラウザで表示するのはそれはそうなのですが、ブラウザ上でHTMLでフォーム中に入力されて、サブミットされる前にJavaScriptでやるのか、サブミットされた後にサーバー側でJava/Springで処理するのか、どちらか、ということです。質問文中にはJavaとはありますが、HTMLのソースを見るとform要素が無いようですし、(少なくとも私には)分かりませんでした。
sga11

2021/10/03 04:48

コメントありがとうございました。 現在の日数はプルダウンメニューで常に表示されるようになっていて、 下記のフォームに入力された値が「計算ボタン」を押すことで、現在日時と入力された日数が足された結果を取得できるようにしたいと考えています。 HTMLにはまだ記述できていませんが、取得した日時を表示するための欄はsubmitの下に追記する予定です。まだ質問するには、足りないところが多すぎる気もしてきたので、このまま進めていき 順次コードも更新していこうと思います。
dodox86

2021/10/03 08:51 編集

多少、繰り返しなコメントになりますが、 1. 今現在、ブラウザ上で表示しているHTMLの日付をもとに、ボタン押下などを契機にそのままフォームで指定した日数分を加算してHTMLに更新表示させるだけの場合。→ フロントであるHTML/JavaScriptのお話です。 2. 今現在、ブラウザ上で表示しているHTMLの日付をもとに、フォームで指定した日数をフォームのパラメータとしてサブミットし、サーバー側で計算して更新したHTMLを出力する場合。→サーバーサイドであるJava、Springの話です。 2. のパターンは単に加算した日付を表示するだけなら処理フローとして冗長かもしれません。Java、サーブレット、Spring、HTMLの勉強にはなるかもしれませんが。あまり質問の内容がブレたり長引かせると回答が付かなくなるので、注意した方が良いです。
sga11

2021/10/03 09:30

やろうとしていることは2.のパターンになります。 理由は、Java Scriptに関しては知識が乏しく、Javaをメインで学習してきたからです。 今回のこのアプリを作成できたら次にJava Scriptを学んでいく予定です。 自分の考えを言語化するのが難しく、伝わらないことも多々あり申し訳ありません。 そんな中で何度もコメントいただき感謝しております。ありがとうございます。 質問の際に必要事項を漏れなく伝えるには、まず自分自身が最低限理解し、 内容を整理した上で質問することが大事ですね。。
guest

回答1

0

自己解決

自力で解決できたので投稿させていただきます。
ただ、今回はJavaの学習も兼ねてのためJavascriptを使用は避けております。

初心者のため、この回答よりさらに分かりやすい書き方も多くあると思いますので、
参考程度にご確認くださいませ。

解決方法

Formクラスを別で作成しフィールドを用意しました。
HTML側のフォームデータをFormクラスを経由して、Java側で読み込むことができました。

流れ

1、HTMLからの値(String)のためJaga側でint型に変換。
2、Calendarクラスを使用して、現在の日にちとフォームデータの日数を加算。
3、SimpleDateFormatを使用するために、Calendar型からDate型に変換。
4、yyyy/MM/ddでフォーマットができたら、出力するためにString型に再度、変換。
5、addAttributeでJava側からHTML側に返却。

これでWeb上に入力された値をJava側で計算処理して再度Web上に更新して表示するということができました。

投稿2021/10/04 05:04

編集2021/10/09 05:36
sga11

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問