String bookedDays = month.BookedDays.ToString();
String[] days = bookedDays.Split(',');
String[] DayNumber = day.Split('/');
int DaySpecific = Convert.ToInt16(DayNumber[0]);
从我的月份数据库中,我提取一个字符串,其中包含由','分隔的所有预订日期(日期时间格式):
例如{01/01/13 00:00:00, 02/01/13 00:00:00, etc}
。
然后我用'/'参数分隔了这一天,所以在DayNumber [0]中我得到了天数的值: 例如
{01/01/13} becomes Daynumber[0] = '01';
DayNumber[1] = '01' DayNumber[2] = '13'
现在这部分我无法弄清楚: 使用Convert.ToInt32从DayNumber [0]中分配DaySpecific的int值,抛出“System.FormatException:输入字符串格式不正确”
DayNumber [0]的值为'01',但转换方法不会使用起始值为0的数字。
我已经尝试过DayNumber [0] .ToString(“N0”),但它总是会出现错误,即过载不正确。
有谁知道我怎么解决这个问题?
(我的Apolagese,如果有一个非常简单的答案)
编辑: 感谢您回复,但尚无解决方案。我的例子中{01/01/13}中的{}纯粹是为了表示数据集。
我包含了一个try catch,这是例外:
mscorlib.dll中出现'System.FormatException'类型的第一次机会异常 System.FormatException:输入字符串的格式不正确。 at System.Number.StringToNumber(String str,NumberStyles options,NumberBuffer& number,NumberFormatInfo info,Boolean parseDecimal) 在System.Number.ParseInt32(String s,NumberStyles样式,NumberFormatInfo信息) 在System.Int16.Parse(String s,NumberStyles样式,NumberFormatInfo信息) 在System.Int16.Parse(String s) 在铁路.Controllers.MonthController.Index()在c:\ Users \ simon \ Documents \ Visual Studio 2012 \ Projects \ railway \ railway \ Controllers \ MonthController.cs:第47行 'iisexpress.exe'(Managed(v4.0.30319)):已加载'C:\ Users \ simon \ AppData \ Local \ Temp \ Temporary ASP.NET Files \ root \ 37a427fe \ 5dbf5c62 \ App_Web_lt1aaagr.dll',已加载符号。 程序'[2276] iisexpress.exe:Managed(v4.0.30319)'已退出,代码为0(0x0)。
答案 0 :(得分:6)
在您提供的测试数据中,您的算法最终将使用{01
作为日期。这会引发格式异常。在转换之前,请确保您的字符串符合您的要求。
答案 1 :(得分:2)
我认为将这些值转换为DateTime值会更有用,如下所示。如果需要,您始终可以只提取日期部分。
var sample = "{01/01/13 00:00:00, 02/01/13 00:00:00}";
var values = Regex.Matches(sample, @"\d{2}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}")
.OfType<Match>()
.Select(value =>
{
DateTime aux;
if (DateTime.TryParseExact(value.Value, "dd/MM/yy HH:mm:ss",
null, DateTimeStyles.AllowWhiteSpaces, out aux))
return aux as DateTime?;
return null;
})
.Where (date => date != null)
.ToList();
foreach (var date in values)
Console.WriteLine(date.Value.Day);
答案 2 :(得分:0)
要获取列表中第一个日期的一部分(如果您有日期时间对象列表):
int DaySpecific = month.BookedDays.First().Day
否则:
String bookedDays = month.BookedDays.ToString();
String[] dates = bookedDays.Split(',');
int DaySpecific = DateTime.Parse(dates.First()).Day;
如果您的列表属于日期时间类型,而不是将日期作为字符串传递,那会更好......
答案 3 :(得分:0)
此代码工作正常。
string bookedDays = "01/01/13 00:00:00, 02/01/13 00:00:00";
string[] days = bookedDays.Split(',');
string[] DayNumber = days[0].Split('/');
int DaySpecific = Convert.ToInt16(DayNumber[0]);