窗体控件都运行在UI线程中,只能由UI线程本身执行,如果在多线程中设置控件的内容,就会被视为不安全的代码,报出异常。具体解决方法就是在窗体构造函数中禁止跨线程安全检测访问。
public Form1
{
InitialComponents();
CheckForIllegalCrossThreadCalls = false;
}
如果你用的2008之前的数据库,这个问题是不能避免的。在sql server2008新增了date和time数据类型,分别用于专门存储日期和时间数据。但是这个问题其实也不是问题,你可以在显示的时候格式化一下就可以了,如:dtToString("yyyy-MM-dd");
可将时间类型定义为datetime,然后以字符串的形式插入即可。
如:
创建表:
create table test(id int,
createtime datetime)
插入数据:
insert into test values (1,'2015-08-01')插入后结果如图:
将DateTime类型转化成string类型即可,转化方法需要使用 SystemDateTime 类的 ToString() 方法,并为其指定格式字符串。
MSDN 中,SystemGlobalizationDateTimeFormatInfo 类的概述里对模式字符串有非常详细的说明,因此,这里我只对常用的一些格式进行说明,首先请看下表:
dd 月中的某一天 一位数的日期有一个前导零
ddd 周中某天的缩写名称 在 AbbreviatedDayNames 中定义
dddd 周中某天的完整名称 在 DayNames 中定义
M 月份数字 一位数的月份没有前导零
MM 月份数字 一位数的月份有一个前导零
MMM 月份的缩写名称 在 AbbreviatedMonthNames 中定义
MMMM 月份的完整名称 在 MonthNames 中定义
y 不包含纪元的年份 如果不包含纪元的年份小于 10,则显示不具有前导零的年份
yy 不包含纪元的年份 如果不包含纪元的年份小于 10,则显示具有前导零的年份
yyyy 包括纪元的四位数的年份
h 12 小时制的小时 一位数的小时数没有前导零
hh 12 小时制的小时 一位数的小时数有前导零
H 24 小时制的小时 一位数的小时数没有前导零
HH 24 小时制的小时 一位数的小时数有前导零
m 分钟 一位数的分钟数没有前导零
mm 分钟 一位数的分钟数有一个前导零
s 秒 一位数的秒数没有前导零
ss 秒 一位数的秒数有一个前导零
为了便于理解,不妨试试下面的程序:
private void TestDateTimeToString() { DateTime now = DateTimeNow; string format; thistextBox1Text = ""; format = "yyyy-MM-dd HH:mm:ss"; thistextBox1AppendText(format + ": " + nowToString(format) + "\n"); format = "yy年M日d日"; thistextBox1AppendText(format + ": " + nowToString(format) + "\n");}
这段程序将输出结果:
yyyy-MM-dd HH:mm:ss: 2002-08-26 17:03:04
yy年M日d日: 02年8日26日
DateTime dt = DateTimeNow;
// Label1Text = dtToString();//2005-11-5 13:21:25
// Label2Text = dtToFileTime()ToString();//127756416859912816
// Label3Text = dtToFileTimeUtc()ToString();//127756704859912816
// Label4Text = dtToLocalTime()ToString();//2005-11-5 21:21:25
// Label5Text = dtToLongDateString()ToString();//2005年11月5日
// Label6Text = dtToLongTimeString()ToString();//13:21:25
// Label7Text = dtToOADate()ToString();//386615565508218
// Label8Text = dtToShortDateString()ToString();//2005-11-5
// Label9Text = dtToShortTimeString()ToString();//13:21
// Label10Text = dtToUniversalTime()ToString();//2005-11-5 5:21:25
// 2005-11-5 13:30:284412864
// Label1Text = dtYearToString();//2005
// Label2Text = dtDateToString();//2005-11-5 0:00:00
// Label3Text = dtDayOfWeekToString();//Saturday
// Label4Text = dtDayOfYearToString();//309
// Label5Text = dtHourToString();//13
// Label6Text = dtMillisecondToString();//441
// Label7Text = dtMinuteToString();//30
// Label8Text = dtMonthToString();//11
// Label9Text = dtSecondToString();//28
// Label10Text = dtTicksToString();//632667942284412864
// Label11Text = dtTimeOfDayToString();//13:30:284412864
// Label1Text = dtToString();//2005-11-5 13:47:04
// Label2Text = dtAddYears(1)ToString();//2006-11-5 13:47:04
// Label3Text = dtAddDays(11)ToString();//2005-11-6 16:11:04
// Label4Text = dtAddHours(11)ToString();//2005-11-5 14:53:04
// Label5Text = dtAddMilliseconds(11)ToString();//2005-11-5 13:47:04
// Label6Text = dtAddMonths(1)ToString();//2005-12-5 13:47:04
// Label7Text = dtAddSeconds(11)ToString();//2005-11-5 13:47:05
// Label8Text = dtAddMinutes(11)ToString();//2005-11-5 13:48:10
// Label9Text = dtAddTicks(1000)ToString();//2005-11-5 13:47:04
// Label10Text = dtCompareTo(dt)ToString();//0
//// Label11Text = dtAdd()ToString();//问号为一个时间段
// Label1Text = dtEquals("2005-11-6 16:11:04")ToString();//False
// Label2Text = dtEquals(dt)ToString();//True
// Label3Text = dtGetHashCode()ToString();//1474088234
// Label4Text = dtGetType()ToString();//SystemDateTime
// Label5Text = dtGetTypeCode()ToString();//DateTime
// Label1Text = dtGetDateTimeFormats('s')[0]ToString();//2005-11-05T14:06:25
// Label2Text = dtGetDateTimeFormats('t')[0]ToString();//14:06
// Label3Text = dtGetDateTimeFormats('y')[0]ToString();//2005年11月
// Label4Text = dtGetDateTimeFormats('D')[0]ToString();//2005年11月5日
// Label5Text = dtGetDateTimeFormats('D')[1]ToString();//2005 11 05
// Label6Text = dtGetDateTimeFormats('D')[2]ToString();//星期六 2005 11 05
// Label7Text = dtGetDateTimeFormats('D')[3]ToString();//星期六 2005年11月5日
// Label8Text = dtGetDateTimeFormats('M')[0]ToString();//11月5日
// Label9Text = dtGetDateTimeFormats('f')[0]ToString();//2005年11月5日 14:06
// Label10Text = dtGetDateTimeFormats('g')[0]ToString();//2005-11-5 14:06
// Label11Text = dtGetDateTimeFormats('r')[0]ToString();//Sat, 05 Nov 2005 14:06:25 GMT
Label1Text = stringFormat("{0:d}",dt);//2005-11-5
Label2Text = stringFormat("{0:D}",dt);//2005年11月5日
Label3Text = stringFormat("{0:f}",dt);//2005年11月5日 14:23
Label4Text = stringFormat("{0:F}",dt);//2005年11月5日 14:23:23
Label5Text = stringFormat("{0:g}",dt);//2005-11-5 14:23
Label6Text = stringFormat("{0:G}",dt);//2005-11-5 14:23:23
Label7Text = stringFormat("{0:M}",dt);//11月5日
Label8Text = stringFormat("{0:R}",dt);//Sat, 05 Nov 2005 14:23:23 GMT
Label9Text = stringFormat("{0:s}",dt);//2005-11-05T14:23:23
Label10Text = stringFormat("{0:t}",dt);//14:23
Label11Text = stringFormat("{0:T}",dt);//14:23:23
Label12Text = stringFormat("{0:u}",dt);//2005-11-05 14:23:23Z
Label13Text = stringFormat("{0:U}",dt);//2005年11月5日 6:23:23
Label14Text = stringFormat("{0:Y}",dt);//2005年11月
Label15Text = stringFormat("{0}",dt);//2005-11-5 14:23:23
Label16Text = stringFormat("{0:yyyyMMddHHmmssffff}",dt);
C# 时间(几个常用时间,程序运行计时,页面运行计时)
DateTime now = SystemDateTimeNow;
nowToString(); //显示: 2006/08/30 17:31:02
nowToString("yyyy-MM-dd hh:mm:ss"); //显示: 2006-08-30 05:39:11
SystemDateTimeMaxValueToString(); //显示: 9999/12/31 23:59:59
SystemDateTimeMinValueToString(); //显示: 0001/01/01 0:00:00
nowToLongDateString(); //显示: 2006年8月30日
nowToLongTimeString(); //显示: 17:34:23
nowToShortTimeString(); //显示: 17:34
nowToString() + " " + nowMillisecondToString(); //显示: 2006/08/30 17:35:19 484
修改日期类型为timestamp 并允许空,如下:
CREATE TABLE `test` (`aaaa` varchar(50) NOT NULL,`createday` timestamp NULL DEFAULT
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT
CHARSET=utf8;
如果是在navicat下 *** 作的话,设置字段的类型为timestamp,默认值写上CURRENT_TIMESTAMP
扩展资料
mysql中的时间类型:
mysql中我们用的时间类型有DATE DATETIME TIME TIMESTAMP四种:
1、DATE只表示日期,检索以YYYY-MM-DD的格式显示,范围是1000-01-01到9999-12-31。
2、TIME只表示时间,检索以HH:MM:SS格式显示,范围是00:00:00到23:59:59。
3、DATETIME表示了日期和时间,检索以YYYY-MM-DD HH:MM:SS格式显示。
4、TIMESTAMP和DATETIME表示格式一样两者的不同点如下:
当使用timestamp的时候,数据有更新的时候这个字段自动更新为当前时间,所以可以作为lastmodify使用,这个变化是默认设置,如果想使时间不更新可以设置DEFAULT CURRENT_TIMESTAMP
timestamp的范围不能早于1970或者晚于2037,超过这个时间范围的话为0。
timestamp存储的时候是转为UTC存储的,获取的时候根据客户端所在时区进行展示。
timestamp占4个字节,datetime占8个字节。
1、stringFormat("{0:g}",dt);//2005-11-5 14:23
2、stringFormat("{0:yyyy\\/MM\\/dd HH:mm:ss}",dt);//2005/11/5 14:23:20 这种格式更适合老外的格式
Decimal也是同理的(对于数据库数据类型为money的数据相当的好用)
var dd = 2000562M;
StringFormat("{0:000}", dd)
显示结果为20006 注意到没有四舍五入了
如果dt=null的话也是可以的,为null时显示是空。
以上就是关于C# 如何给从数据库获取时间给datetime赋值全部的内容,包括:C# 如何给从数据库获取时间给datetime赋值、文本框输入时间传给数据库datetime,不存时分秒、如何在数据库输入时间类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)