将字符串转换为TimeSpan

本文关键字:TimeSpan 转换 字符串 | 更新日期: 2023-09-27 18:23:38

我需要将其转换为时间跨度:

  • 8
  • 8.3
  • 8.15

当我这样做的时候:

DateTime s = booking.TourStartDate.Add(TimeSpan.Parse(booking.TourStartTime.Replace(".", ":")));

它最终会在几天内添加"10"(上午10点),而不是现在的时间,尽管格式很愚蠢。

将字符串转换为TimeSpan

您可以尝试以下操作:

var ts = TimeSpan.ParseExact("0:0", @"h':m",
                             CultureInfo.InvariantCulture);

你可以用简单的方法:

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 ;
}

我的头顶上有点像

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),你可以像我在例子中那样做。

这适用于给定的示例:

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); 

只需提供所需的格式即可。

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);
}