String []到Integer的转换错误

时间:2013-12-09 12:46:02

标签: c# asp.net asp.net-mvc-4 type-conversion

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

4 个答案:

答案 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]);