我的项目中有一个关于日期时间的重大问题。用户提供日期输入,或者有时我根据项目要求从数据库中获取日期。但是如果手动插入用户给出的格式不同,我从数据库获得的日期格式与不同的服务器不同。为了使日期时间采用一种格式,我在开发中使用了这种方法tryParseExact()
它运行正常,但在生产中它也失败了生产日期时间格式也不同,所以有时它会解析,有时需要错误的dateformat而不是采用dd / MM / yyyy需要MM / dd / yyyy。我添加了用于解析日期时间的代码段。
SqlParameter StartingDateParam=null;
DateTime mdate=null;
string idate = GetEffectiveFromDate();//retriving date from database
string[] formats = new[] { "dd-MM-yyyy", "MM/dd/yyyy", "dd/MM/yyyy", "yyyy-MM-dd", "dd/MM/yyyy HH:mm:ss"};
string sysFormat = CultureInfo.CurrentCulture.DateTimeFormat.;//getting the host datetime format
if (DateTime.TryParseExact(idate, formats, System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out mdate))
{
StartingDateParam = new SqlParameter("@startingdate", SqlDbType.DateTime);
StartingDateParam.Value = mdate;
}
这里有一个问题是格式数组中给出的格式序列,第二个我必须根据用户输入在数组中添加所有类型的日期时间格式。 请帮助获得统一的解决方案。
答案 0 :(得分:3)
你的方法是不可能的!
想象一下用户输入dd/MM/yyyy
(今天7 apr 2017
的日期)。如果这是4月7日或7月4日,你无法知道!
如果允许用户以两位数输入年份,情况会更糟!
如果允许用户输入部分字词(例如select d.*
,((d.week-m.min_w+1)
-(48*(cast(left(d.week,4) as int)
- cast(left(min_w,4) as int)
)
)
)as dynamic_week
from dynw d
inner join (select store_id,min(week) min_w
from dynw
group by store_id
) m
on d.store_id=m.store_id
order by 1,2
),情况会更糟。
明确建议:使用日期选择器控件而不是文本输入。至少在您的应用程序中进行转换,并向用户显示转换日期。目前,当您的代码处理值时,验证/转换必须已经完成......