我需要将其转换为时间跨度:
当我这样做的时候:
DateTime s = booking.TourStartDate.Add(TimeSpan.Parse(booking.TourStartTime.Replace(".", ":")));
它会在几天之内加上说'10'(上午10点),而不是时间,尽管它是一种愚蠢的格式。
答案 0 :(得分:10)
您可以尝试以下方法:
var ts = TimeSpan.ParseExact("0:0", @"h\:m",
CultureInfo.InvariantCulture);
答案 1 :(得分:3)
你可以用直截了当的方式做到:
static Regex myTimePattern = new Regex( @"^(\d+)(\.(\d+))?$") ;
static TimeSpan MyString2Timespan( string s )
{
if ( s == null ) throw new ArgumentNullException("s") ;
Match m = myTimePattern.Match(s) ;
if ( ! m.Success ) throw new ArgumentOutOfRangeException("s") ;
string hh = m.Groups[1].Value ;
string mm = m.Groups[3].Value.PadRight(2,'0') ;
int hours = int.Parse( hh ) ;
int minutes = int.Parse( mm ) ;
if ( minutes < 0 || minutes > 59 ) throw new ArgumentOutOfRangeException("s") ;
TimeSpan value = new TimeSpan(hours , minutes , 0 ) ;
return value ;
}
答案 2 :(得分:1)
string[] time = booking.TourStartTime.Split('.');
int hours = Convert.ToInt32(time[0]);
int minutes = (time.Length == 2) ? Convert.ToInt32(time[1]) : 0;
if(minutes == 3) minutes = 30;
TimeSpan ts = new TimeSpan(0,hours,minutes,0);
我不确定你的目标是几分钟。如果你想8.3是8:30那么8.7会是什么?如果只是间隔15分钟(15,3,45)你可以像我在例子中那样做。
答案 3 :(得分:0)
这适用于给出的示例:
double d2 = Convert.ToDouble("8"); //convert to double
string s1 = String.Format("{0:F2}", d2); //convert to a formatted string
int _d = s1.IndexOf('.'); //find index of .
TimeSpan tis = new TimeSpan(0, Convert.ToInt16(s1.Substring(0, _d)), Convert.ToInt16(s1.Substring(_d + 1)), 0);
答案 4 :(得分:0)
只提供您需要的格式。
var formats = new[] { "%h","h\\.m" };
var ts = TimeSpan.ParseExact(value, formats, CultureInfo.InvariantCulture);
测试证明它有效:
var values = new[] { "8", "8.3", "8.15" };
var formats = new[] { "%h","h\\.m" };
foreach (var value in values)
{
var ts = TimeSpan.ParseExact(value, formats, CultureInfo.InvariantCulture);
Debug.WriteLine(ts);
}