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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

NetBeans

NetBeansは Java、HTML5、PHP、C/C++のアプリケーションのフレームワーク、もしくは統合開発環境(NetBeans IDE)の両方を指します

Java

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

Q&A

1回答

2055閲覧

JUnitのテストでシステム言語やシステム時刻帯の設定方法について

chu-mi

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

NetBeans

NetBeansは Java、HTML5、PHP、C/C++のアプリケーションのフレームワーク、もしくは統合開発環境(NetBeans IDE)の両方を指します

Java

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

0グッド

0クリップ

投稿2022/08/19 01:24

編集2022/08/19 07:07

前提

JUnitでテストを実行しているのですが、
マシンの時刻帯を参照しているのかJSTで動作してしまいます。

new Timestamp(1672531199000L); // 期待:2022/12/31 23:59:59 // 実際:2023/01/01 08:59:59

また、MessageResourceを利用してメッセージ取得を行っているのですが、
対応言語が存在しない場合、サーバではシステム言語が英語のため英語ファイルが選択されますが、
開発環境では日本語がシステム言語のため日本語ファイルが選択されてしまいます。

テストの時だけシステム時刻・言語がそれぞれ、UTC・英語とするにはどうしたら良いでしょうか?
実際にPCのシステム時刻・言語は変更しない方法があればご教示お願いします。

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

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

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

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

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

dodox86

2022/08/19 06:51

タグに”Java”を付けると、よりJavaに詳しい回答者の方々の目に留まると思います。
guest

回答1

0

JUnit特有の設定の仕方があったりするかもしれませんが、JUnitに限らない、汎用のやり方であれば、プログラムでタイムゾーンを自力でUTCに変更してやれば、そのプログラムの実行中、すなわちJVMの実行中はデフォルトのタイムゾーンがそれになります。具体的にはjava.util.TimeZone.setDefault を使います。

実例として以下のサンプルプログラムを用意しました。

Java

1import java.sql.Timestamp; 2import java.util.TimeZone; 3 4public class Sample { 5 public static void main(String[] args) { 6 7 String[] ids = TimeZone.getAvailableIDs(); 8 // "UTC"が含まれていること 9 assert(java.util.Arrays.asList(ids).contains("UTC")); 10 11 System.out.printf("Default TZ(ID): %s\n", TimeZone.getDefault().getID()); 12 13 // 期待:2022/12/31 23:59:59 14 // 実際:2023/01/01 08:59:59 15 Timestamp ts = new Timestamp(1672531199000L); 16 System.out.println(ts); 17 18 // UTCのタイムゾーンを取得 19 TimeZone newTz = TimeZone.getTimeZone("UTC"); 20 TimeZone.setDefault(null); // 念の為キャッシュをクリア 21 TimeZone.setDefault(newTz); 22 System.out.printf("Default TZ(ID): %s\n", TimeZone.getDefault().getID()); 23 // UTCをデフォルトのタイムゾーンとして日時文字列を出力 24 System.out.println(ts); 25 } 26} 27

これをWindows10のコマンドプロンプト、Java実行環境で実行すると以下のような出力を得ます。UTCで日時文字列が出力されているのが分かります。

CMD

1C:\Java>javac -version 2javac 1.8.0_291 3 4C:\Java>javac Sample.java 5 6C:\Java>java Sample 7Default TZ(ID): Asia/Tokyo 82023-01-01 08:59:59.0 9Default TZ(ID): UTC 102022-12-31 23:59:59.0

あるいはJavaプログラム実行時にコマンドラインオプション-Duser.timezoneを指定し、JVMのシステムプロパティの値を変更することでもできます。JUnitの実行時に適切に設定できれば、これが利用できるかもしれません。

※参考
JREでのタイムゾーン設定 - Oracle

投稿2022/08/19 06:50

dodox86

総合スコア9183

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問