C# 英国日期格式问题
我有一个基于餐厅网络的项目,目前正在进行,并且在C# 英国日期格式问题,c#,javascript,datetime,C#,Javascript,Datetime,我有一个基于餐厅网络的项目,目前正在进行,并且在Datetime方面遇到问题 我有一个WebMethod,它将表预订添加到SQL Server数据库中 [WebMethod] public void AddTable(string first, string last, string email, long telephone, int people, string special, DateTime bookingDate) { using (BookingLinqDataContex
Datetime
方面遇到问题
我有一个WebMethod
,它将表预订添加到SQL Server数据库中
[WebMethod]
public void AddTable(string first, string last, string email, long telephone, int people, string special, DateTime bookingDate)
{
using (BookingLinqDataContext bl = new BookingLinqDataContext())
{
bl.AddTable(first, last, email, telephone, people, bookingDate, special);
}
}
这是从Ajax调用解析的数据:
$("#AddTableBut").click(function () {
var firstName = $("#FirstName").val();
var lastName = $("#LastName").val();
var email = $("#Email").val();
var telephone = $("#Telephone").val();
var numberPeople = $("#NumberPeople").val();
var date = $("#DateComing").val();
var special = $("#SpecialReq").val();
var Book = {
'first': firstName,
'last': lastName,
'email': email,
'telephone': telephone,
'people': numberPeople,
'special': special,
'bookingDate': date
}
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/PeldonRoseService.asmx/AddTable",
dataType: "json",
data: JSON.stringify(Book),
success: function () {
$("[id$=booking]").hide('blind', { direction: 'up' }, 2000);
$("#BookNowBut").delay(2100);
$("#BookNowBut").show('slide', { direction: 'right' }, 500);
}
});
});
当我测试这个时,我以英国日期格式dd-MM-yyyy
将日期添加到相应的文本框中。但是,我从Chrome的开发者工具栏收到此错误:
消息:2014年4月30日不是DateTime的有效值
但是,如果我使用美国日期格式MM-dd-yyyy
一切都很好
问题可能是我的浏览器的区域性信息吗?在某个地方,您必须解析日期字符串。考虑以下两种方法之一: 服务器端解析
- 按输入的内容传递文本框的内容-您当前正在执行此操作
- 将
参数声明为bookingDate
而不是string
DateTime
- 在方法体中,使用
或DateTime.Parse
将字符串转换为DateTime.ParseExact
DateTime
- 进行此操作时,请确保您考虑了用户的文化。类似于
的字符串可能表示1月4日或4月1日。默认情况下,“1/4/2014”
和Parse
方法将使用当前区域性。如果应用程序中的其他地方没有逻辑将线程的当前区域性设置为用户的区域性,则可以传入特定的区域性。如果你两者都不做,那么你可能不会得到你期望的行为李>ParseExact
- 在JavaScript代码中,不要只传递文本框中输入的内容。相反,将该字符串解析为
对象或日期
对象()。浏览器的语言和区域性设置将影响值的解析方式时刻
- 然后将其格式化为ISO-8601格式,例如
(年、月、日)“2014-04-13”
- 将该字符串传递给服务器
- 在服务器代码中,可以将参数保留为
,而不必关心区域性设置DateTime
var date=moment($(“#DateComing”).val(),“l”).format(“YYYY-MM-DD”);
如果没有moment.js,则可以执行以下操作:
var dt=newdate($(“#DateComing”).val();
函数zeroPad(n){返回n<10?'0'+n:n;}
var date=dt.getFullYear()+'-'+zeroPad(dt.getMonth()+1)+
'-'+zeroPad(dt.getDate());
(因为您收集的是一个完整的日期和时间,所以我不会使用
toISOString
或toJSON
方法,而是使用上面的方法之一。)使用.parse函数对我来说很有效
jquery保持不变:
$("#AddTableBut").click(function () {
var firstName = $("#FirstName").val();
var lastName = $("#LastName").val();
var email = $("#Email").val();
var telephone = $("#Telephone").val();
var numberPeople = $("#NumberPeople").val();
var date = $("#DateComing").val();
var special = $("#SpecialReq").val();
var Book = {
'first': firstName,
'last': lastName,
'email': email,
'telephone': telephone,
'people': numberPeople,
'special': special,
'bookingDate': date
}
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/PeldonRoseService.asmx/AddTable",
dataType: "json",
data: JSON.stringify(Book),
success: function () {
$("[id$=booking]").hide('blind', { direction: 'up' }, 2000);
$("#BookNowBut").delay(2100);
$("#BookNowBut").show('slide', { direction: 'right' }, 500);
}
});
}))
但是,webmethod有一个细微的变化:
[WebMethod]
public void AddTable(string first, string last, string email, long telephone, int people, string special, string bookingDate)
{
Date time dt = DateTime.parse(bookingDate);
using (BookingLinqDataContext bl = new BookingLinqDataContext())
{
bl.AddTable(first, last, email, telephone, people, dt, special);
}
}
将中的日期作为字符串参数进行解析,然后使用上面的.Parse函数将字符串作为日期进行解析。然后可以使用linq查询将该日期解析到数据库中 如果您没有在浏览器中进行任何类型的日期格式设置,则它不能是浏览器。您只需将文本框的内容作为字符串发送到服务器,服务器会尝试将其转换为
DateTime
值,至少根据我在这个问题中看到的情况。更改方法签名以将字符串传递给webmethod可能更容易,在c#代码中使用DateTime.Parse()/DateTime.TryParse()像建议的那样使用.parse函数,效果非常好!非常感谢你!!这只是第一步。第2步是使用查询参数。@user3529183如果Parse()
函数对您有效,为什么不添加它作为答案?