ゆるゆるプログラミング

・時分秒変換

与えられた時間を時分秒に変換するプログラムの作り方を解説しています。

時間は3つの単位、時間/分/秒のいずれかで与え、その時間を時分秒に分けるプログラムです。例えば、3.5時間→3時間30分00秒170分→2時間50分00秒4000秒→1時間6分40秒というような感じです。

時間は実数(小数点あり)で、分と秒は整数で与えます。

このプログラムのソースコードは以下のとおりです。

TimeSample.java
001:    class MyTime
002:    {
003:    	// 時間を秒(second)で保持
004:    	private int second = 0;
005:    
006:    
007:    	// 秒をセット
008:    	public void set_second( int s )
009:    	{
010:    		second = s;
011:    	}	
012:    
013:    	// 分を秒でセット
014:    	public void set_minute( int m )
015:    	{
016:    		// 分を秒に変換(1分=60秒)
017:    		second = m * 60;
018:    	}	
019:    
020:    	// 時間を秒でセット(実数)
021:    	public void set_hour( double h )
022:    	{
023:    		// 時間を秒に変換(1時間=3600秒)
024:    		second = (int)( h * 3600.0 );
025:    	}	
026:    
027:    
028:    	// 時間成分を返す
029:    	public int get_hour()
030:    	{
031:    		// 秒を3600で割って時間を計算
032:    		return second / 3600;
033:    	}
034:    
035:    
036:    	// 分成分を返す
037:    	public int get_minute()
038:    	{
039:    		// 秒を60で割って分を計算
040:    		// さらに60で割ったあまりを分成分とする
041:    		return ( second / 60 ) % 60;
042:    	}
043:    
044:    
045:    	// 秒成分を返す
046:    	public int get_second()
047:    	{
048:    		// 秒を60で割ったあまりを秒成分とする
049:    		return second % 60;
050:    	}
051:    
052:    
053:    }
054:    
055:    
056:    public class TimeSample {
057:    	public static void main( String[] args ) {
058:    		// MuTimeクラスの作成
059:    		MyTime mt = new MyTime();
060:    
061:    		int    s, m;
062:    		double h;
063:    
064:    		// 秒を設定し、時分秒に変換
065:    		s = 123456;
066:    		mt.set_second( s );
067:    		System.out.println();
068:    		System.out.println( s + "秒=" + mt.get_hour() + "時間"
069:    			 + mt.get_minute() + "分" + mt.get_second() + "秒" );
070:    
071:    		// 分を設定し、時分秒に変換
072:    		m = 800;
073:    		mt.set_minute( m );
074:    		System.out.println();
075:    		System.out.println( m + "分=" + mt.get_hour() + "時間"
076:    			 + mt.get_minute() + "分" + mt.get_second() + "秒" );
077:    
078:    		// 時間を設定し、時分秒に変換
079:    		h = 5.75;
080:    		mt.set_hour( h );
081:    		System.out.println();
082:    		System.out.println( h + "時間=" + mt.get_hour() + "時間"
083:    			 + mt.get_minute() + "分" + mt.get_second() + "秒" );
084:    	}
085:    } 

TimeSample.javaの出力結果


123456秒=34時間17分36秒

800分=13時間20分0秒

5.75時間=5時間45分0秒

ここからは、このソースコードを上から順番に解説していきます。

001:    class MyTime

時分秒への変換を行うクラス名を、MyTimeとしています。

003:    	// 時間を秒(second)で保持
004:    	private int second = 0;

MyTimeクラスint型のメンバ変数secondを定義し、初期値に0を入れています。

007:    	// 秒をセット
008:    	public void set_second( int s )
009:    	{
010:    		second = s;
011:    	}	

MyTimeクラスに秒を設定するメソッドset_secondです。引数sで与えられた値をそのままsecondに代入しています。

013:    	// 分を秒でセット
014:    	public void set_minute( int m )
015:    	{
016:    		// 分を秒に変換(1分=60秒)
017:    		second = m * 60;
018:    	}	

MyTimeクラスに分を設定するメソッドset_minuteです。引数mで与えられた値に60を掛けてsecondに代入しています。分の値に60を掛けて単位を秒に変換しています。(1分は60秒)

020:    	// 時間を秒でセット(実数)
021:    	public void set_hour( double h )
022:    	{
023:    		// 時間を秒に変換(1時間=3600秒)
024:    		second = (int)( h * 3600.0 );
025:    	}	

MyTimeクラスに時間を設定するメソッドset_hourです。引数hで与えられた値に3600を掛けてsecondに代入しています。時間の値に3600を掛けて単位を秒に変換しています。(1時間は3600秒)

double型変数hの値に3600.0を掛けて、int型変数secondに型キャストして値を代入しています。このとき、小数点以下の値は切り捨てられます。

028:    	// 時間成分を返す
029:    	public int get_hour()
030:    	{
031:    		// 秒を3600で割って時間を計算
032:    		return second / 3600;
033:    	}

MyTimeクラスに設定された時間の時間成分だけを取得するメソッドget_hourです。秒で保持している設定値secondを3600で割って時間部分を計算しています。この計算で割り切れなかった余りは切り捨てです。

036:    	// 分成分を返す
037:    	public int get_minute()
038:    	{
039:    		// 秒を60で割って分を計算
040:    		// さらに60で割ったあまりを分成分とする
041:    		return ( second / 60 ) % 60;
042:    	}

MyTimeクラスに設定された時間の分成分だけを取得するメソッドget_minuteです。秒で保持している設定値secondを60で割って、その値をさらに60で割った余りを分成分として計算しています。秒(second)を60で割って、時間の単位を分に変換し、時間成分に変換できない余りを分成分として抽出しています。式で表すと分=(時間成分×60)+分成分となり、分を60で割った余りが分成分になることがわかります。

045:    	// 秒成分を返す
046:    	public int get_second()
047:    	{
048:    		// 秒を60で割ったあまりを秒成分とする
049:    		return second % 60;
050:    	}

MyTimeクラスに設定された時間の秒成分だけを取得するメソッドget_secondです。秒で保持している設定値secondを60で割った余りを秒成分として抽出しています。60で割り切れる時間は分成分として抽出できるので、60で割った余りが秒成分になります。式で表すと秒=(分成分×60)+秒成分となり、秒を60で割った余りが秒成分になることがわかります。

056:    public class TimeSample {

クラス名を、TimeSampleとしています。

057:    	public static void main( String[] args ) {

このmainメソッドからプログラムを実行します。

058:    		// MuTimeクラスの作成
059:    		MyTime mt = new MyTime();

MyTimeのインスタンスを作っています。

061:    		int    s, m;
062:    		double h;

このプログラムで使用する時間、分、秒の変数をそれぞれh、m、sという名前で宣言しています。

064:    		// 秒を設定し、時分秒に変換
065:    		s = 123456;
066:    		mt.set_second( s );
067:    		System.out.println();
068:    		System.out.println( s + "秒=" + mt.get_hour() + "時間"

MyTimeのset_secondメソッドに秒を設定し、その時間を時間/分/秒の成分に分解した結果を表示しています。

070:    
071:    		// 分を設定し、時分秒に変換
072:    		m = 800;
073:    		mt.set_minute( m );
074:    		System.out.println();

MyTimeのset_minuteメソッドに分を設定し、その時間を時間/分/秒の成分に分解した結果を表示しています。

076:    			 + mt.get_minute() + "分" + mt.get_second() + "秒" );
077:    
078:    		// 時間を設定し、時分秒に変換
079:    		h = 5.75;
080:    		mt.set_hour( h );

MyTimeのset_hourメソッドに時間を設定し、その時間を時間/分/秒の成分に分解した結果を表示しています。

与える時間を変えて計算結果を確認してください。

■関連コンテンツ

変数について Javaで扱う変数について解説
計算結果の表示 四則演算で計算した結果を表示するプログラムについて解説
ITで使われる単位 ITで使われる単位を紹介

■新着情報

2017.11.17 N値化 カラー画像をN値化する方法について解説
2017.11.16 最も近い値の取得 指定値に最も近い配列の値を取得する方法を解説
2017.10.02 アルファ値(透過) アルファ値(透過)について

■広告

法人向けのETC専用カード

~約8,000名の受講生と80社以上の導入実績~ 企業向けプログラミング研修ならCodeCamp

日本最大級ショッピングサイト!お買い物なら楽天市場

Topへ