C# 从日期时间转换为C格式的“2012年10月1日23:59:59:000”到“2012年10月1日23:59:59”
我的数据库包含格式为2012-10-01 23:59:59.000的起始日期,同时将其值作为2012年10月1日23:59:59:000的提交前端。那么,如果没有Oct格式,我如何获取日期呢 我也试过这个C# 从日期时间转换为C格式的“2012年10月1日23:59:59:000”到“2012年10月1日23:59:59”,c#,asp.net,C#,Asp.net,我的数据库包含格式为2012-10-01 23:59:59.000的起始日期,同时将其值作为2012年10月1日23:59:59:000的提交前端。那么,如果没有Oct格式,我如何获取日期呢 我也试过这个 foreach (DataRow dr in _dt.Rows) { dr["FromDt"] = String.Format("{0:dd-MM-yyyy hh:mm tt zzz}", dr["FromDt"]); dr["ToDt"] =
foreach (DataRow dr in _dt.Rows)
{
dr["FromDt"] = String.Format("{0:dd-MM-yyyy hh:mm tt zzz}", dr["FromDt"]);
dr["ToDt"] = String.Format("{0:dd-MM-yyyy}", dr["ToDt"]);
}
但是不能
我把stackoverflow的所有要求都提到了我所知的范围内。请提出一些办法。
提前谢谢
我也使用了下面这些颤音-
DateTime dt = DateTime.Parse(dr["FromDt"].ToString());
dr["FromDt"] = String.Format("{0:dd-MM-yyyy hh:mm tt zzz}", dr["FromDt"]);
tl;dr表示该代码适用于DateTime或DateTimeOffset值。但是,在这种情况下,dr[FromDt]中的对象类型不是DateTime或DateTimeOffset值
按预期工作:
string.Format("{0:yyyy-MM-dd}",DateTime.Now) // -> 2012-10-09
观察到的行为;foo是一个字符串,忽略了格式修饰符:
string.Format("{0:junk}","foo") // -> foo
如果该值恰好是一个字符串(希望是在从数据库读取时意外转换的),则显示的值看起来可疑地像someDateTime.ToString,并且在数据库中不是这样,则:
固定/移除转换,或者,
将其转换回DateTime first hack:
若您使用的是datetimepicker,那个么只需进入它的属性,然后将format属性设置为short。然后在显示日期时,您应该将其显示为>>
dtpFrmDate.Value.Date.ToShortDateString();
我想它会给你想要的结果。试试这个
将字段转换为DateTime dt&然后应用格式这应该可以
DateTime dt = DateTime.Parse(dr["FromDt"];
String.Format("{0:dd MMM yyyy hh:mm:ss tt zzz}", dt)
如果你不想要时区,那么你应该把它当作
String.Format("{0:dd MMM yyyy hh:mm:ss}", dt)
如果您想从下面的示例中学习,可以使用任何格式
// create date time 2008-03-09 16:05:07.123
DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123);
String.Format("{0:y yy yyy yyyy}", dt); // "8 08 008 2008" year
String.Format("{0:M MM MMM MMMM}", dt); // "3 03 Mar March" month
String.Format("{0:d dd ddd dddd}", dt); // "9 09 Sun Sunday" day
String.Format("{0:h hh H HH}", dt); // "4 04 16 16" hour 12/24
String.Format("{0:m mm}", dt); // "5 05" minute
String.Format("{0:s ss}", dt); // "7 07" second
String.Format("{0:f ff fff ffff}", dt); // "1 12 123 1230" sec.fraction
String.Format("{0:F FF FFF FFFF}", dt); // "1 12 123 123" without zeroes
String.Format("{0:t tt}", dt); // "P PM" A.M. or P.M.
String.Format("{0:z zz zzz}", dt); // "-6 -06 -06:00" time zone
// date separator in german culture is "." (so "/" changes to ".")
String.Format("{0:d/M/yyyy HH:mm:ss}", dt); // "9/3/2008 16:05:07" - english (en-US)
String.Format("{0:d/M/yyyy HH:mm:ss}", dt); // "9.3.2008 16:05:07" - german (de-DE)
// month/day numbers without/with leading zeroes
String.Format("{0:M/d/yyyy}", dt); // "3/9/2008"
String.Format("{0:MM/dd/yyyy}", dt); // "03/09/2008"
// day/month names
String.Format("{0:ddd, MMM d, yyyy}", dt); // "Sun, Mar 9, 2008"
String.Format("{0:dddd, MMMM d, yyyy}", dt); // "Sunday, March 9, 2008"
// two/four digit year
String.Format("{0:MM/dd/yy}", dt); // "03/09/08"
String.Format("{0:MM/dd/yyyy}", dt); // "03/09/2008"
String.Format("{0:t}", dt); // "4:05 PM" ShortTime
String.Format("{0:d}", dt); // "3/9/2008" ShortDate
String.Format("{0:T}", dt); // "4:05:07 PM" LongTime
String.Format("{0:D}", dt); // "Sunday, March 09, 2008" LongDate
String.Format("{0:f}", dt); // "Sunday, March 09, 2008 4:05 PM" LongDate+ShortTime
String.Format("{0:F}", dt); // "Sunday, March 09, 2008 4:05:07 PM" FullDateTime
String.Format("{0:g}", dt); // "3/9/2008 4:05 PM" ShortDate+ShortTime
String.Format("{0:G}", dt); // "3/9/2008 4:05:07 PM" ShortDate+LongTime
String.Format("{0:m}", dt); // "March 09" MonthDay
String.Format("{0:y}", dt); // "March, 2008" YearMonth
String.Format("{0:r}", dt); // "Sun, 09 Mar 2008 16:05:07 GMT" RFC1123
String.Format("{0:s}", dt); // "2008-03-09T16:05:07" SortableDateTime
String.Format("{0:u}", dt); // "2008-03-09 16:05:07Z" UniversalSortabl
那么:
var dt = DateTime.ParseExact(dr["FromDt"].ToString(), "dd MMM yyyy HH:mm:ss:fff", enUS, DateTimeStyles.None);
var output = dt.ToString("dd-MM-yyyy HH:mm:ss.fff");
编辑:更改为使用ParseExact,以适应输入字符串的稍微奇怪的格式。您使用datetimepicker吗?@knowledge Seeker-我检查了您的答案,这会导致错误,因为-String未被识别为有效的日期时间。还有其他建议吗?您没有执行任何日期检查以查看日期是否为空或格式是否错误……感谢您的时间,正如您告诉我们的那样使用日期时间。Parse DateTime dt=DateTime.Parsedr[FromDt]。ToString;这会导致错误,因为未将-String识别为有效的日期时间。@Teju,请使用String strDate=dr[FromDT].ToString;查看它是否有效,并使用DateTime dt=DateTime.ParsestrDate;这应该是可行的,否则你必须先检查数据的格式是否正确或为空,当我使用它作为DateTime dt=DateTime.Parse2012-10-01 23:59:56.000时,它对我来说效果很好//2012年10月1日23:59:59:000 Reponse.write String.Format{0:dd-MMM-yyy-hh:mm:sss},dt;再次感谢您的回复。foreach DataRow dr in{u dt.Rows{String strDate=dr[FromDt].ToString;DateTime dt=DateTime.ParsestrDate;dr[FromDt]=String.Format{0:dd-MM-yyyy-hh:MM-tt-zzz},dr[FromDt];由于字符串未被识别为有效的日期时间,因此在粗体行上再次出现错误。dr[ToDt]=String.Format{0:dd-MM-yyyy},dr[ToDt];}嘿,strDate=01-Oct-2012 13:30:00:000在断点上,所以当我将其解析到下一行时,**DateTime dt=DateTime.ParsestrDate;**造成上述错误..DateTime dt=DateTime.Parse2012-10-01 23:59:56.000;这很好用,但是在我的字符串中,month是Oct格式。这导致了错误。感谢您的回复,上面的代码导致错误5“System.DateTime.Parsestring”的最佳重载方法匹配有一些无效参数C:\Inetpub\wwwroot\Complaint\Entry\SDF\sdflifleveUpdate.aspx.cs 70 28很抱歉-我在对象中添加了一个.ToString使其生效parsable.@TejuMB该代码适用于DateTime或DateTimeOffset值。-所以,找出是什么使它不是DateTime值。真正的价值是什么?为什么?感谢您的时间pst,在我的数据库中FromDtdatetime的值是2012-10-01 23:59:59.000,但当我通过datatable将此值带到前端时,它的提交时间为2012年10月1日23:59:59:000。请再次检查我编辑的问题。@TejuMB可能有什么东西正在将其转换为字符串-找出它是什么。我相信我的结论是正确的,我已经提供了证明的例子。也就是说,验证它是DataTable中的DateTime,并验证该列的类型是否合适。我怀疑这是真的,因为您的代码试图将垃圾值推回。嘿,再次感谢您的回复。。是的,我在我的数据库中得到了差异,值为2012年10月1日13:30:00.000,但当将其传递到前端时,显示为2012年10月1日13:30:00:000,您可以看到。已更改为:当我将数据从SQL发送到前端时。为什么会这样?是的,我终于明白了,在将数据从SQL发送到前端的过程中,我将其类型转换为SQL so中的字符串。已转移到:。