我正在使用以下代码
DateTime dtt=new DateTime();
dtt = Convert.ToDateTime(FromDate);
// DateTime dtt = DateTime.Parse(FromDate); //this also gives the same error
con = new MySqlConnection(conString);
con.Open();
for (int i = 1; i <= TotalDays; i++)
{
string updateHotelBooking = "Update tbl_hotelbookingdetail set `BookedRoom`=`BookedRoom`+"+1+", `AvailableRoom`=`TotalRoom`-`BookedRoom` where `HotelID`="+HotelID+" AND `CurrentDate`='"+dtt.ToString("dd-MM-yyyy")+"'";
MySqlCommand cmd7=new MySqlCommand(updateHotelBooking,con);
cmd7.ExecuteNonQuery();
dtt = dtt.AddDays(1);
}
此代码位于我用于iPhone应用程序的网络服务之一。
此处FromDate
是此格式15-11-2011
中具有值的字符串,它以字符串格式来自应用程序。我将它转换为DateTime,因为在总天数的循环中
I need to add day to dtt.
它在dtt值为15-11-2011 00:00:00
但是当我发布它时,它会给出错误
String was not recognize as valid DateTime
答案 0 :(得分:5)
这几乎可以肯定是因为您的服务器默认使用不同的文化 - 而您的代码只是使用当前的线程文化。
您可以使用DateTime.Parse
指定此内容 - 或者使用DateTime.ParseExact
或DateTime.TryParseExact
明确指定模式 - 但我们需要了解更多字符串的位置来自建议最好的方法。是来自用户吗?如果是这样,您应该使用用户的文化来解析它。它是一种特定格式(例如来自XML文档)吗?如果是这样,请使用该特定格式进行解析。
理想情况下,完全摆脱字符串部分 - 例如,如果您从数据库中取出它,是否可以存储它并将其作为 a DateTime
而不是作为串?值得尝试尽可能减少所涉及的字符串转换次数。
编辑:要使用固定格式的dd-MM-yyyy进行解析,我会使用:
DateTime value;
if (DateTime.TryParseExact(text, "dd-MM-yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal,
out value))
{
// Value will now be midnight UTC on the given date
}
else
{
// Parsing failed - invalid data
}
答案 1 :(得分:2)
本地计算机和服务器上的文化设置是什么?
DateTime转换取决于当前的文化 - 不同国家/地区的日期编写方式截然不同。
进行转换的一种方法&#34;可预测&#34;是使用不变文化:
DateTime dtt = Convert.ToDateTime(FromDate, CultureInfo.InvariantCulture);
答案 2 :(得分:1)
服务器日期格式可能是mm / dd / yyyy而你试图传递dd / mm / yyyy
using System;
using System.Globalization;
public class Example
{
public static void Main()
{
string[] dateValues = { "30-12-2011", "12-30-2011",
"30-12-11", "12-30-11" };
string pattern = "MM-dd-yy";
DateTime parsedDate;
foreach (var dateValue in dateValues) {
if (DateTime.TryParseExact(dateValue, pattern, null,
DateTimeStyles.None, out parsedDate))
Console.WriteLine("Converted '{0}' to {1:d}.",
dateValue, parsedDate);
else
Console.WriteLine("Unable to convert '{0}' to a date and time.",
dateValue);
}
}
}
// The example displays the following output:
// Unable to convert '30-12-2011' to a date and time.
// Unable to convert '12-30-2011' to a date and time.
// Unable to convert '30-12-11' to a date and time.
// Converted '12-30-11' to 12/30/2011.
答案 3 :(得分:0)
记录(或以其他方式向自己提供反馈)FromDate是什么。也许它是空的?
答案 4 :(得分:0)
服务器上的语言设置可能不同,因此无法识别dd-MM-yyyy
- 尝试使用DateTime.ParseExact(dateString, "dd-MM-yyyy", CultureInfo.InvariantCulture);