C#のTimeSpan.FromTicks()メソッドとは?構文と使い方をサンプルコード付きで解説
C#のTimeSpan.FromTicks()メソッドは、ティック(tick)単位で指定された時間を表すTimeSpanオブジェクトを返す静的メソッドです。1ティックは100ナノ秒に相当するため、ミリ秒よりも細かい高精度な時間間隔を扱いたい場合に特に便利です。
構文
TimeSpan.FromTicks()メソッドの構文は以下のとおりです。
public static TimeSpan FromTicks (long val);
パラメータ「val」には、時間を表すティック数をlong型で指定します。負の値を渡すことで、過去方向の時間間隔も表現できます。
戻り値
このメソッドは、指定されたティック数に対応する時間間隔を表すTimeSpanオブジェクトを返します。
コード例1
それでは、基本的な使用例を見てみましょう。以下のコードでは、FromTicks()のほか、FromHours()やFromMilliseconds()など、関連するファクトリメソッドも併せて使用し、TimeSpan.Compare()メソッドで各時間間隔を比較しています。
using System;
public class Demo {
public static void Main() {
TimeSpan span1 = TimeSpan.FromTicks(18768768);
TimeSpan span2 = new TimeSpan(-9, 45, 50);
TimeSpan span3 = TimeSpan.FromHours(5);
TimeSpan span4 = TimeSpan.FromMilliseconds(10000);
TimeSpan span5 = TimeSpan.FromMinutes(2);
TimeSpan span6 = TimeSpan.FromMinutes(20);
Console.WriteLine("TimeSpan1 = "+span1);
Console.WriteLine("TimeSpan2 = "+span2);
Console.WriteLine("TimeSpan3 = "+span3);
Console.WriteLine("TimeSpan4 = "+span4);
Console.WriteLine("TimeSpan5 = "+span5);
Console.WriteLine("Result (Comparison of span1 and span2) = "+TimeSpan.Compare(span1, span2));
Console.WriteLine("Result (Comparison of span2 and span3) = "+TimeSpan.Compare(span2, span3));
Console.WriteLine("Result (Comparison of span1 and span3) = "+TimeSpan.Compare(span1, span3));
Console.WriteLine("Result (Comparison of span3 and span4) = "+TimeSpan.Compare(span3, span4));
Console.WriteLine("Result (Comparison of span4 and span5) = "+TimeSpan.Compare(span4, span5));
}
}出力結果
上記のコードを実行すると、次のような出力が得られます。
TimeSpan1 = 00:00:01.8768768 TimeSpan2 = -08:14:10 TimeSpan3 = 05:00:00 TimeSpan4 = 00:00:10 TimeSpan5 = 00:02:00 Result (Comparison of span1 and span2) = 1 Result (Comparison of span2 and span3) = -1 Result (Comparison of span1 and span3) = -1 Result (Comparison of span3 and span4) = 1 Result (Comparison of span4 and span5) = -1
TimeSpan.Compare()メソッドは、最初の引数が2番目より大きい場合は「1」、小さい場合は「-1」、等しい場合は「0」を返します。
コード例2
続いて、別の例を見てみましょう。この例では、FromTicks(1)とコンストラクタnew TimeSpan(1)が同じ結果になること、また1ティックがどれほど短い時間かが確認できます。
using System;
public class Demo {
public static void Main() {
TimeSpan span1 = TimeSpan.FromTicks(1);
TimeSpan span2 = new TimeSpan(1);
TimeSpan span3 = TimeSpan.FromHours(1);
TimeSpan span4 = TimeSpan.FromMilliseconds(1);
TimeSpan span5 = TimeSpan.FromMinutes(1);
TimeSpan span6 = TimeSpan.FromMinutes(1);
Console.WriteLine("TimeSpan1 = "+span1);
Console.WriteLine("TimeSpan2 = "+span2);
Console.WriteLine("TimeSpan3 = "+span3);
Console.WriteLine("TimeSpan4 = "+span4);
Console.WriteLine("TimeSpan5 = "+span5);
Console.WriteLine("Result (Comparison of span1 and span2) = "+TimeSpan.Compare(span1, span2));
Console.WriteLine("Result (Comparison of span2 and span3) = "+TimeSpan.Compare(span2, span3));
Console.WriteLine("Result (Comparison of span1 and span3) = "+TimeSpan.Compare(span1, span3));
Console.WriteLine("Result (Comparison of span3 and span4) = "+TimeSpan.Compare(span3, span4));
Console.WriteLine("Result (Comparison of span4 and span5) = "+TimeSpan.Compare(span4, span5));
}
}出力結果
TimeSpan1 = 00:00:00.0000001 TimeSpan2 = 00:00:00.0000001 TimeSpan3 = 01:00:00 TimeSpan4 = 00:00:00.0010000 TimeSpan5 = 00:01:00 Result (Comparison of span1 and span2) = 0 Result (Comparison of span2 and span3) = -1 Result (Comparison of span1 and span3) = -1 Result (Comparison of span3 and span4) = 1 Result (Comparison of span4 and span5) = -1
まとめ
TimeSpan.FromTicks()メソッドを使用すると、ティック単位の値から簡単にTimeSpanオブジェクトを生成できます。1ティック=100ナノ秒という仕様により、パフォーマンス計測など高精度な時間処理が必要な場面で活躍します。また、FromHours()、FromMinutes()、FromMilliseconds()といった類似のファクトリメソッドも用意されているため、目的の精度に応じて使い分けるとよいでしょう。
-
C#のCompareTo()メソッドの使い方を解説
C#では、2つの値を比較する際にCompareTo()メソッドを使用します。このメソッドは、呼び出し元の値と引数で渡した値を比較し、その大小関係を整数値として返します。CompareTo()メソッドの戻り値CompareTo()メソッドの戻り値は以下の3パターンです。0 = 両方の値が等しい場合1 = 呼び出し元の値が引数の値より大きい場合(第2の数値が小さい)-1 = 呼び出し元の値が引数の値より小さい場合(第1の数値が小さい)CompareTo()メソッドの実装例それでは、C#でCompareTo()メソッドを実装するサンプルコードを見てみましょう。ここでは、同じ値を持つ2つのint型変数
-
RubyのArray#zipメソッド徹底解説!2つの配列をスマートに結合する方法
2つの配列を要素ごとに比較して、その違いを見つけたいと思ったことはありませんか? あるいは、各インデックスごとに最大の数値を求めたい、キーのリストと値のリストを組み合わせてハッシュを作りたい――そんな場面にも出会うことがあるでしょう。 …これを「面倒な方法」で実装すると、次のようなコードになります。 例:冗長な書き方 a = [1,2,3,4,5] b = [1,2,3,6,8] c = a.map.with_index { |_, idx| [a[idx], b[idx]] } # [[1, 1], [2, 2], [3, 3], [4, 6], [5, 8]] 確かに動作はしますが