intra-mart Accel Platform TERASOLUNA Server Framework for Java (5.x) プログラミングガイド 第18版 2024-04-01

ユーザのタイムゾーン、日付と時刻の形式を利用する

前提

  • 各種設定値
設定項目 設定値
ユーザ・タイムゾーン (GMT+09:00) 日本 / 東京
システム・タイムゾーン (GMT+00:00) UTC
日付と時刻の形式 英語形式
日付(標準表示) MMM d, yyyy
日付(簡易表示) MMM d
日付(入力) yyyy/MM/dd
時刻(標準表示) h:mm a
時刻(タイムスタンプ表示) h:mm:ss a
時刻(入力) HH:mm
  • テーブル定義

    CREATE TABLE example_table (
        user_cd     VARCHAR(100) NOT NULL,
        update_date TIMESTAMP  NOT NULL,
        PRIMARY KEY (user_cd)
    );
    
  • DB アクセス

example_table テーブルの参照、更新を行うために、次のクラスが用意されていることを前提とします。
example_table のレコード情報を格納するためのモデルクラスです。
ExampleTableModel
example_table の参照、更新を行うクラスです。
SampleService

画面から送信された日時を DB に保存する

画面から入力された日時をサーバ側で解析して、DB に保存するまでの流れを説明します。
画面には、ユーザの日付と時刻の入力形式で次の値が入力され、サーバに送信されたとします。
2012/09/19 03:46
サーバ側のプログラムは以下の通りです。
import java.util.Date;

import jp.co.intra_mart.foundation.context.Contexts;
import jp.co.intra_mart.foundation.context.model.AccountContext;
import jp.co.intra_mart.foundation.i18n.datetime.format.AccountDateTimeFormatter;
import jp.co.intra_mart.foundation.i18n.datetime.format.DateTimeFormatIds;
import jp.co.intra_mart.foundation.i18n.datetime.format.DateTimeFormatterException;
import jp.co.intra_mart.foundation.i18n.sa.sample.model.ExampleTableModel;
import jp.co.intra_mart.foundation.i18n.sa.sample.service.SampleService;
import jp.co.intra_mart.foundation.i18n.sa.sample.service.SampleServiceException;

/**
 * サンプル
 */
public class SampleDateTime {

    /**
     * 画面から送信された日時を DB に保存します。
     *
     * @param inputDate 画面から送信された日時文字列
     * @throws DateTimeFormatterException
     * @throws SampleServiceException
     */
    public void sample(final String inputDate) throws DateTimeFormatterException, SampleServiceException {

        /*
         * 1. 画面から送信された日時文字列を解析します。
         */
        final Date date = AccountDateTimeFormatter.parse(inputDate, Date.class,
                DateTimeFormatIds.IM_DATETIME_FORMAT_DATE_INPUT,
                DateTimeFormatIds.IM_DATETIME_FORMAT_TIME_INPUT);

        /*
         * 2. モデルを利用して、DB へ日時を保存します。
         */
        final ExampleTableModel model = new ExampleTableModel();
        model.setUserCd(Contexts.get(AccountContext.class).getUserCd());
        model.setDate(date);

        SampleService.getInstance().update(model);

    }
}
ユーザの入力形式に沿った日時文字列を解析するためには、AccountDateTimeFormatter を使用します。
AccountDateTimeFormatter は、ログインユーザのタイムゾーンを使って解析します。
DB には、システム・デフォルト・タイムゾーンに変換された日時を保存します。
Date 型オブジェクトは、タイムゾーンを持たないため、DB の TIMESTAMP 型カラムには JDK のタイムゾーンに変換された日時が保存されます。
JDK のタイムゾーンとシステム・デフォルト・タイムゾーンは同じです。

画面から送信された日付を DB に保存する

画面から入力された日付をサーバ側で解析して、DB に保存するまでの流れを説明します。

注意

画面から日付のみを入力させる場合でも、次の例のように、通常は時刻まで考慮しなければなりません。

(例)交通費申請の締め切り日

「締め切り日」には、23時59分59秒(または、営業時間)まで、という時刻に関する意味が含まれています。
例えば、本社のある日本(GMT+09:00)の9月19日が締め切り日だとすると、ホノルル(GMT-10:00)支社では、9月19日 午前5時までに交通費申請を終わらせなければなりません。

画面には、ユーザの日付入力形式で次の値が入力され、サーバに送信されたとします。
2012/09/19
サーバ側のプログラムは以下の通りです。
import java.util.Date;

import jp.co.intra_mart.foundation.context.Contexts;
import jp.co.intra_mart.foundation.context.model.AccountContext;
import jp.co.intra_mart.foundation.i18n.datetime.format.AccountDateTimeFormatter;
import jp.co.intra_mart.foundation.i18n.datetime.format.DateTimeFormatIds;
import jp.co.intra_mart.foundation.i18n.datetime.format.DateTimeFormatterException;
import jp.co.intra_mart.foundation.i18n.sa.sample.model.ExampleTableModel;
import jp.co.intra_mart.foundation.i18n.sa.sample.service.SampleService;
import jp.co.intra_mart.foundation.i18n.sa.sample.service.SampleServiceException;

/**
 * サンプル
 */
public class SampleDateTime {

    /**
     * 画面から送信された日時を DB に保存します。
     *
     * @param inputDate 画面から送信された日時文字列
     * @throws DateTimeFormatterException
     * @throws SampleServiceException
     */
    public void sample(final String inputDate) throws DateTimeFormatterException, SampleServiceException {

        /*
         * 1. 画面から送信された日時文字列を解析します。
         */
        final Date date = AccountDateTimeFormatter.parse(inputDate, Date.class,
                DateTimeFormatIds.IM_DATETIME_FORMAT_DATE_INPUT,
                DateTimeFormatIds.IM_DATETIME_FORMAT_TIME_INPUT);

        /*
         * 2. モデルを利用して、DB へ日時を保存します。
         */
        final ExampleTableModel model = new ExampleTableModel();
        model.setUserCd(Contexts.get(AccountContext.class).getUserCd());
        model.setDate(date);

        SampleService.getInstance().update(model);

    }
}
日付文字列の場合、時刻部分は「00:00:00」として解析されます。
DB への保存は、「画面から送信された日付を DB に保存する」と同様です。

DB に保存されている日時をユーザの画面に表示する

DB に保存されている日時を、ユーザのタイムゾーン、日付と時刻の表示形式を使って日時文字列に整形し、画面に表示するまでの流れを説明します。
サーバ側のプログラムは以下の通りです。
import jp.co.intra_mart.foundation.context.Contexts;
import jp.co.intra_mart.foundation.context.model.AccountContext;
import jp.co.intra_mart.foundation.i18n.datetime.format.AccountDateTimeFormatter;
import jp.co.intra_mart.foundation.i18n.datetime.format.DateTimeFormatIds;
import jp.co.intra_mart.foundation.i18n.sa.sample.model.ExampleTableModel;
import jp.co.intra_mart.foundation.i18n.sa.sample.service.SampleService;
import jp.co.intra_mart.foundation.i18n.sa.sample.service.SampleServiceException;

/**
 * サンプル
 */
public class SampleDateTimeView {

    /**
     * DB に保存されている日時をユーザの画面に表示します。
     * 
     * @return String 日時文字列
     * @throws SampleServiceException
     */
    public String sample() throws SampleServiceException {

        /*
         * 1. DB から日時を取得します。
         */
        final ExampleTableModel model = SampleService.getInstance().get(Contexts.get(AccountContext.class).getUserCd());

        /*
         * 2. 日時文字列に整形します。
         */
        return AccountDateTimeFormatter.format(model.getDate(),
                DateTimeFormatIds.IM_DATETIME_FORMAT_DATE_STANDARD,
                DateTimeFormatIds.IM_DATETIME_FORMAT_TIME_STANDARD);
    }
}
DB には、システム・デフォルト・タイムゾーンに変換された日時が保存されています。
ユーザの表示形式に沿った日時文字列に整形するためには、AccountDateTimeFormatter を使用します。
AccountDateTimeFormatter は、ログインユーザのタイムゾーンにおける時刻を計算します。
以下の結果が得られます。
Sep 19, 2012 3:46 AM

DB に保存されている日付をユーザの画面に表示する

DB に保存されている日付を、ユーザのタイムゾーン、日付の表示形式を使って日付文字列に整形し、画面に表示するまでの流れを説明します。
サーバ側のプログラムは以下の通りです。
import jp.co.intra_mart.foundation.context.Contexts;
import jp.co.intra_mart.foundation.context.model.AccountContext;
import jp.co.intra_mart.foundation.i18n.datetime.format.AccountDateTimeFormatter;
import jp.co.intra_mart.foundation.i18n.datetime.format.DateTimeFormatIds;
import jp.co.intra_mart.foundation.i18n.sa.sample.model.ExampleTableModel;
import jp.co.intra_mart.foundation.i18n.sa.sample.service.SampleService;
import jp.co.intra_mart.foundation.i18n.sa.sample.service.SampleServiceException;

/**
 * サンプル
 */
public class SampleDateView {

    /**
     * DB に保存されている日付をユーザの画面に表示します。
     * 
     * @return String 日付文字列
     * @throws SampleServiceException
     */
    public String sample() throws SampleServiceException {

        /*
         * 1. DB から日時を取得します。
         */
        final ExampleTableModel model = SampleService.getInstance().get(Contexts.get(AccountContext.class).getUserCd());

        /*
         * 2. 日付文字列に整形します。
         */
        return AccountDateTimeFormatter.format(model.getDate(), DateTimeFormatIds.IM_DATETIME_FORMAT_DATE_STANDARD);
    }
}
次の結果が得られます。
Sep 19, 2012

クライアント側で、ユーザ・タイムゾーンの今日から3日間の日付を生成し、最後の日付をサーバ側へ送信する

このサンプルを通して、csjs で日時データを扱う際に注意する点を理解します。

1. ユーザ・タイムゾーンの今日を取得する

ユーザ・タイムゾーンとは、ユーザが intra-mart Accel Platform に登録したタイムゾーンのことです。
ユーザ・タイムゾーンにおける「今日」を csjs で取得するためには、intra-mart Accel Platform から提供されている ImDate を使用します。

注意

ユーザ・タイムゾーンにおける「今日」の取得に、csjs の new Date を利用しないでください。
csjs の new Date はクライアント OS のタイムゾーンにおける現在日時データを返しますが、ユーザ・タイムゾーンがクライアント OS のタイムゾーンと一致しているとは限りません。
<script type="text/javascript" src="im_i18n/timezone/im_date_timezone.js"></script>
<script type="text/javascript">
var firstDate = ImDate.now();
</script>

2. 今日から3日間の日付を生成する

Date に標準で用意されているメソッドを使用して構いません。
var dateArray = new Array();
var date = firstDate;
for (var i = 0; i < 3; i++) {
    dateArray[i] = date;
    date.setDate(date.getDate() + 1);
}

3. 最後の日付をサーバ側へ送信する

年月日の値から日付文字列を作ります。
var lastDate = dateArray[2];
var lastDateStr = lastDate.getFullYear() + "-" + (lastDate.getMonth() + 1) + "-" + lastDate.getDate();

注意

ImDate.now() で生成した Date のエポックミリ秒は送信しないでください。

ImDate.now() の返す Date は、ユーザ・タイムゾーンにおける「今日」の年月日時分秒を持っていますが、エポックミリ秒は正しいとは限りません。
理由は、クライアント側で Date を生成しているためです。
Date の持つエポックミリ秒は、クライアント OS のタイムゾーンで計算された値となり、ユーザ・タイムゾーンで計算された値と一致しない可能性があります。

注意

サーバ側でユーザ・タイムゾーンの日時データを生成する場合は、Date ではなく、DateTime を使用してください。
Date はシステム・デフォルトのタイムゾーンで計算するため、ユーザ・タイムゾーンとの時差を考慮して扱う必要があります。
DateTime は指定されたタイムゾーンで計算できます。
jp.co.intra_mart.foundation.i18n.datetime.DateTime dateTime = new jp.co.intra_mart.foundation.i18n.datetime.DateTime(Contexts.get(AccountContext.class).getTimeZone(), 1996, Calendar.SEPTEMBER, 19, 3, 47, 0);

4. クライアント側から送信された日付文字列から Date を生成する

サーバ側のプログラムは以下の通りです。
import java.sql.Date;
import java.util.TimeZone;

import javax.servlet.http.HttpServletRequest;

import jp.co.intra_mart.foundation.context.Contexts;
import jp.co.intra_mart.foundation.context.model.AccountContext;
import jp.co.intra_mart.foundation.i18n.datetime.format.DateTimeFormatter;
import jp.co.intra_mart.foundation.i18n.datetime.format.DateTimeFormatterException;

/**
 * サンプル
 */
public class SampleDTF {

    /**
     * クライアント側から送信された日付文字列から Date を生成します。
     * @param request リクエスト
     * @throws DateTimeFormatterException
     */
    public void sample(final HttpServletRequest request) throws DateTimeFormatterException {

        /*
         * 1. クライアント側から送信された日付文字列を取得します。
         */
        final String inputDateStr = request.getParameter("inputDate");

        /*
         * 2. DateTimeFormatter を使用して、日付文字列から Date を生成します。
         */
        final TimeZone userTimeZone = Contexts.get(AccountContext.class).getTimeZone();
        final DateTimeFormatter formatter = DateTimeFormatter.withPattern("yyyy-MM-dd");
        formatter.setTimeZone(userTimeZone);
        final Date inputDate = formatter.parse(inputDateStr, Date.class);
    }
}
日時文字列がユーザの日付と時刻の入力形式に沿っていない場合、DateTimeFormatter を使用します。
DateTimeFormatter は、直接フォーマットパターンを指定できます。
DateTimeFormatter は、システム・デフォルトのタイムゾーンを使って解析を行います。
ユーザ・タイムゾーンを使って解析を行う場合は、parse メソッドを実行する前に、ユーザ・タイムゾーンをセットします。

@AccountDateFormat アノテーションを利用して、クライアント側から送信された文字列を Date で受け取る。

画面から入力された日付、日時、時刻の文字列を Date型のフィールドにバインドします。
日付、日時、時刻に対応するアノテーションは以下の通りです。
パターン アノテーション フォーマット タイムゾーン変換(デフォルト値)
日付 @AccountDateFormat 日付(入力) なし
日時 @AccountDateTimeFormat 日付(入力) 時刻(入力) あり
時刻 @AccountTimeFormat 時刻(入力) なし
  • フォーマットについて
    日付のフォーマットについては 日付と時刻の形式 を参照してください。
  • タイムゾーン変換について
    入力された文字列をアカウントのタイムゾーンでの日時とし、サーバ側でのDate型プロパティにセットするときにシステムタイムゾーンにします。タイムゾーン変換なしの場合は、入力された文字列、サーバ側でのDate型プロパティもシステムタイムゾーンでの値です。
画面から入力された文字列をアカウントのタイムゾーンとし、Date型プロパティに設定する例を次に示します。
import java.util.Date;

import jp.co.intra_mart.framework.extension.spring.format.annotation.AccountDateFormat;
import jp.co.intra_mart.framework.extension.spring.format.annotation.AccountDateTimeFormat;
import jp.co.intra_mart.framework.extension.spring.format.annotation.AccountTimeFormat;

public class SampleForm {

    // ここではシステムタイムゾーンはJSTとします。

    // 日付フォーマットのリクエスト文字列をDate型プロパティにバインドします。
    // (String) 2000/01/01 が (Date) 2000/01/01 00:00:00 JST になります。
    // デフォルトではタイムゾーン変換しません。
    @AccountDateFormat
    private Date date;

    // 日時フォーマットのリクエスト文字列をDate型プロパティにバインドします。
    // アカウントのタイムゾーンがGMTの場合、システムタイムゾーンのJST(+9)に変換するので、
    // (String) 2000/01/01 00:00 が (Date) 2000/01/01 09:00:00 JST になります。
    @AccountDateTimeFormat
    private Date datetime;

    // 時刻フォーマットのリクエスト文字列をDate型プロパティにバインドします。
    // (String) 01:00 が (Date) 1970/01/01 01:00:00 JST になります。
    // デフォルトではタイムゾーン変換しません。
    @AccountTimeFormat
    private Date time;

    // 日付フォーマットでタイムゾーン変換ありに設定した場合
    // (String) 2000/01/01 が (Date) 2000/01/01 09:00:00 JST になります。
    @AccountDateFormat(convertTimeZone = true)
    private Date dateTimezone;

    // getter, setter ...
}

コラム

フォーマット変換に失敗した場合のエラーメッセージコードの解決については Spring Frameworkの仕様に従います。
Resolving Codes to Error Messages」 を参照してください。

Data binding を利用して、クライアント側から送信された文字列を Date で受け取る。

Controller クラスに @InitBinder を設定したメソッドを作成し、データバインドの定義を登録します。
以下に、@InitBinderを使用したデータバインドの例を示します。
import java.util.Date;

public class SampleForm {

    private Date date;

    private Date datetime;

    private Date time;

    // getter, setter ...
}
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import jp.co.intra_mart.foundation.i18n.datetime.format.AccountDateTimeFormatter;
import jp.co.intra_mart.foundation.i18n.datetime.format.DateTimeFormatIds;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("sample/tgfw/datetime")
public class DateTimeController {

    @RequestMapping("register")
    public String register(SampleForm form, BindingResult result) {

        // 登録して、入力画面を再表示

        // 登録処理など ...

        return "sample/tgfw/datetime/input.jsp";
    }

    @InitBinder
    public void initBinder(final WebDataBinder binder) {
        // プロパティ"date"に対するデータバインド設定
        // "日付(入力)"フォーマットパターンを取得します。
        final String datePattern = AccountDateTimeFormatter.getPattern(DateTimeFormatIds.IM_DATETIME_FORMAT_DATE_INPUT);
        // DateFormatを生成します。
        final DateFormat dateFormat = new SimpleDateFormat(datePattern);
        // プロパティ"date"に対するデータバインドを登録します。
        binder.registerCustomEditor(Date.class, "date", new CustomDateEditor(dateFormat, true));

        // プロパティ"datetime"に対するデータバインド設定
        final String datetimePattern = AccountDateTimeFormatter.getPattern(DateTimeFormatIds.IM_DATETIME_FORMAT_DATE_INPUT, DateTimeFormatIds.IM_DATETIME_FORMAT_TIME_INPUT);
        final DateFormat datetimeFormat = new SimpleDateFormat(datetimePattern);
        binder.registerCustomEditor(Date.class, "datetime", new CustomDateEditor(datetimeFormat, true));

        // プロパティ"time"に対するデータバインド設定
        final String timePattern = AccountDateTimeFormatter.getPattern(DateTimeFormatIds.IM_DATETIME_FORMAT_TIME_INPUT);
        final DateFormat timeFormat = new SimpleDateFormat(timePattern);
        binder.registerCustomEditor(Date.class, "time", new CustomDateEditor(timeFormat, true));
    }
}
画面から入力された文字列を、date, datetime, timeのDate型のフィールドにセットしています。
この例では、タイムゾーンの変換をしていません。入力された文字列、サーバ側でのDate型プロパティもシステムタイムゾーンでの値です。

JSONでの日付の項目とJavaのオブジェクトのDate型のプロパティとを変換する。

Spring Framework MVCでは、リクエストやレスポンスにJSONをセットして送る場合に、Jacksonを利用してJSONとJavaのオブジェクトとを変換しています。
Jacksonでは、デフォルトでDate型のプロパティはエポックミリ秒で出力され、日付項目の文字列は yyyy-MM-dd’T’HH:mm:ss.SSSZ 形式でパースされます。
これをアカウントに設定された日付フォーマットで変換するようにします。
Date型プロパティとJSONとの変換のフォーマットを指定できるようにするために、以下のようにJacksonの設定を行います。
これにより、(フォーム)モデルクラスに @AccountDateFormatアノテーションなどを設定して日付をフォーマットして出力できます。
  1. bean定義xmlファイルの設定
    mvc:message-convertersを設定します。
  2. Controllerクラスの設定
    リクエストをJSONで受け取るようにします。
    レスポンスにJSONをセットするようにします。
  3. フォーム(モデル)クラスの設定
    Date型のプロパティにアノテーションを設定します。
  4. JSPの設定
    送信データをjsonデータにします。
    JSP側でjsonデータを受け取ります。

1. bean定義xmlファイルの設定

applicationContext-im_tgfw_web.xml のmvc:annotation-drivenタグに mvc:message-convertersタグを追加します。
Message converterにMappingJackson2HttpMessageConverterを設定し、そのobjectMapperプロパティに AccountDateObjectMapper を設定します。
AccountDateObjectMapper により、アノテーションが動作します。
    <mvc:annotation-driven conversion-service="conversionService">

        <!-- 略 -->

        <!-- jackson message converter -->
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="jp.co.intra_mart.framework.extension.spring.http.converter.json.AccountDateObjectMapper" />
                </property>
            </bean>
        </mvc:message-converters>

    </mvc:annotation-driven>

2. Controllerクラスの設定

SpringFramework MVCに従って、リクエスト、レスポンスにJSONをセットするように設定します。
この例では、メソッドの引数に@RequestBodyアノテーションを設定し、メソッドの戻り値にJSONにするクラスを定義しメソッドに@ResponseBodyアノテーションを設定します。
@Controller
@RequestMapping("path/to")
public class SampleController {

    @RequestMapping("json")
    @ResponseBody
    public SampleModel json(@RequestBody DateJsonForm form) {
        // form.date には入力した日付のDateがセットされる。

        SampleModel sampleModel = new SampleModel();

        // sampleModelに値を設定する処理

        return sampleModel;
    }
}

3. フォーム(モデル)クラスの設定

必要に応じて、Date型のプロパティに @AccountDateFormatアノテーションを設定します。
import java.util.Date;

import jp.co.intra_mart.framework.extension.spring.format.annotation.AccountDateFormat;

public class DateJsonForm {

    // AccountDateFormatアノテーションを設定した例
    @AccountDateFormat
    private Date date;


    // setter & getter
}
import java.util.Date;

import jp.co.intra_mart.framework.extension.spring.format.annotation.AccountDateFormat;

public class SampleModel {

    // アノテーションなし
    private Date date;

    // AccountDateFormatアノテーションを設定した例
    @AccountDateFormat
    private Date dateDefault;

    // フォーマットタイプをSIMPLEに設定した例
    @AccountDateFormat(type = AccountDateFormat.TYPE.SIMPLE)
    private Date dateSimple;

    // AccountDateTimeFormatアノテーションを設定した例
    @AccountDateTimeFormat
    private Date datetimeDefault;


    // setter & getter
}

4. JSPの設定

AjaxでJSONデータを送信、受信する場合の例を示します。
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="imui" uri="http://www.intra-mart.co.jp/taglib/imui"%>

<imui:head>
<title>sample</title>
<script type="text/javascript">
(function ($) {
  $(document).ready(function () {
    $('#link').on('click', function () {

      $.ajax({
        dataType : 'json',
        url : '<c:url value="path/to/json"/>',
        data : JSON.stringfy({ date : "2000/01/01" }), // アカウントの日付フォーマットに従ったフォーマット
        type :'GET',
        success : function (data, textStatus, jqXHR) {
          // 受け取ったデータ(data)の処理の例
          $('#date').val(data.date);
          $('#dateDefault').val(data.dateDefault);
          $('#dateSimple').val(data.dateSimple);
          $('#datetimeDefault').val(data.datetimeDefault);
        }
      });

    });
  });
})(jQuery);
</script>
</imui:head>

<div class="imui-title">
  <h1>json - index page</h1>
</div>

<div class="imui-form-container">

<a href="javascript:void(0);" id="link">fetch data</a>

<ul>
<li>アノテーションなし - エポックミリ秒で表示<br/><input type="text" id="date" name="date" value=""></li>
<li>@AccountDateFormat - yyyy/MM/dd形式で表示<br/><input type="text" id="dateDefault" name="dateDefault" value=""></li>
<li>@AccountDateFormat(type = SIMPLE) - MM/dd形式で表示<br/><input type="text" id="dateSimple" name="dateSimple" value=""></li>
<li>@AccountDateTimeForma - yyyy/MM/dd HH:mm形式で表示<br/><input type="text" id="datetimeDefault" name="datetimeDefault" value=""></li>
</ul>

</div>