2012-05-03 4 views
0

分の文字列を受け取り、それを費やした合計時間に変換したいと思います。文字列を分単位で変換する

90分の場合は、1時間30分に変換します。

150分だった場合は、2時間30分に変換したいと考えています。ここで

は、私がこれまで持っているものです。

DataTable data = GeneralFunctions.GetData(query); 
object sumObject; 
sumObject = data.Compute("Sum(Minutes_Spent)", ""); 
if (reportType == 1) 
{ 
    RepeaterPCBillable.DataSource = data; 
    RepeaterPCBillable.DataBind(); 
    LabelPCBillable.Text = sumObject.ToString(); 
} 
else 

私は私が必要とする結果を生むか、私は部門のいくつかの種類を行う必要があります場合は、その時点機能で構築されたいくつかがあるかどうかわからないんだけど。

答えて

3

に建てられたものは何もありません。

あなたは、文字列のために独自の解析ルーチンを記述する必要があります。 C#で

例:

// assumes input is valid for integer parsing 
int totalMinutes = int.Parse(inputString); 
int hours = totalMinuts/60; 
int minutes = totalMinutes % 60; 
+0

アイブ常にトラブルのフォーマットで0.0 VS#を理解した...どんなに私が読んでどのように多くの記事... : –

+0

@RoyiNamir - Even [MSDN](http://msdn.microsoft.com/en-us/library/0c899ak8.aspx)? – Oded

+0

提案されている提案されたTimeSpanよりも利点がありますか? –

2

あなたはTimeSpan.FromMinutesを使用し、それから、時間と分を取得することができます。

var span = TimeSpan.FromMinutes(int.Parse(inputString)); 
var hours = span.Hours; 
var minutes = span.Minutes; 
+0

いいえ。 'FromMinutes'は' double'の入力が必要です... – Oded

+0

@Oded C#は自動的に 'int'を' double'に変換しませんか? – dasblinkenlight

+0

@Oded、それは、 – Habib

0

さて、ここでは一般的なアルゴリズムだ:

int hours=string_minutes/60; 
int minutes=string_minutes%60; 

基本的に最初の操作は、あなたの商を与えた後、第2 1はあなた剰余/

+0

ところで、まずstring_minutesをIntに変換してください –

1

を与える存在内蔵のものは何もありませんが、それはですそうするのは難しくありません。これを段階的にやりましょう。

var match = Regex.Match(input, @"^(\d+) minutes$"); 
if (!match.Success) 
    throw new Exception("Invalid input format"); 

はその後、我々は整数に分の文字列を変換します:

var input = "130 minutes"; 

は、今、私たちはminutesの前に数字を抽出するために、正規表現を使用します。これが私たちの例で入力され

var minutes = int.Parse(match.Groups[1].Value); // now contains 130 

次に、我々は整数除算およびモジュロ演算を使用して、時間と分を分割:

var hours = minutes/60; 
minutes = minutes % 60; 

そして、最後に、我々は再び文字列に結果をフォーマットすることができます。

var result = String.Format("{0} hours and {1} minutes", hours, minutes); // 2 hours and 10 minutes 
関連する問題