2016-06-18 14 views
0

TimeSpanに文字列値を変換する必要があります。しかし、それはエラーを示しています。文字列( "08:55 AM")をタイムスパンに変換しようとしています

文字列が有効なTimeSpanとして認識されませんでした。

コードは次のとおりです。私はそれが"08:55"に文字列値を解析することができます

TimeSpan _time = TimeSpan.Parse("08:55 AM"); 

知っています。しかし、私はそれを必要としません。私は文字列にAMまたはPMを使用する必要があります。 データベースでは、列データ型はtime(7)で、entity frameworkを使用しています。

+3

「TimeSpan」は何かがかかる時間の長さです。 '' 8:55 AM "'は時間の長さではなく、特定の時間です。特定の時間がある場合は、代わりに 'DateTime'を使います。 – Claies

+3

[DateTime.Parse](https://msdn.microsoft.com/en-us/library/system.datetime.parse(v = vs.110).aspx)はどうですか? –

+0

データベースでは、列のデータ型はtime(7)で、エンティティフレームワークを使用しています。だから私はTimeSpanを使わなければならない。 –

答えて

2

あなたは、SQL Timeデータ型は、一日の時間が格納されていない

TimeSpan _time; 
string input = "08:55 PM"; 
string[] fmts = new string[] {@"hh\:mm\ \A\M", @"hh\:mm\ \P\M"}; 
if(TimeSpan.TryParseExact(input, fmts, CultureInfo.InvariantCulture, out _time)) 
{ 
    if(input.EndsWith("PM")) 
     _time = _time.Add(new TimeSpan(12,0,0)); 
    Console.WriteLine(_time.ToString());   
} 
+0

それがうまくいく間、私は理解している方が良いと思います。 –

+0

はい私はそれに同意します。問題には明確に説明されていないものがあるようです。 TimeSpanの代わりにDateTimeを使用することが可能な場合は、より良いでしょう。 – Steve

1

このコードでのTimeSpanに、文字列のようなものを変換することができます。代わりに、深夜からのミリ秒数として時刻を格納します。

"08:55"のAMバージョンをタイムパンに変換することは、深夜から8時間55分、PMバージョンは"20:55"、「深夜から20時間55分」となります。 TimeSpanオブジェクトはこの計算を本質的に行いませんが、結果をシミュレートできます。

using System; 

public class Program 
{ 
    public static void Main() 
    { 
     Console.WriteLine("Hello World"); 
     DateTime timespan = DateTime.Parse("08:55 AM"); //gives us a DateTime object 
     DateTime timespan2 = DateTime.Parse("08:55 PM"); 

     TimeSpan _time = timespan.TimeOfDay; //returns a TimeSpan from the Time portion 
     TimeSpan _time2 = timespan2.TimeOfDay; 
     Console.WriteLine(_time); 
     Console.WriteLine(_time2); 
    } 
} 

https://dotnetfiddle.net/XVLVPl

1

"8:55 AM" は、特定の時間ではないスパンであるので、解析に失敗しています。しかし、真夜中からの時間や午前または午後の正午からの時間が必要なように聞こえるかもしれません

ここでは2つのアプローチがあります。一つは、解析する前の時間からAM/PMを取り除くことです。次のように:

string timeValue = "08:55 AM"; 
TimeSpan _time = TimeSpan.Parse(timeValue.Replace(" AM", "").Replace(" PM", "")); 

また、TimeTime.Parseを使用してTimeOfDayプロパティを使用することもできます。

string timeValue = "08:55 AM"; 
TimeSpan _time = DateTime.Parse(timeValue).TimeOfDay; 
if (_time > TimeSpan.FromHours(12)) _time -= TimeSpan.FromHours(12); 

私は第2のアプローチを好む。

関連する問題