本文目录
- datetime和timestamp的区别
- DateTime是值类型还是引用类型
- datetime时间格式
- smalldatetime 和 datetime有什么区别
- date,datetime,time timestamp 用法怎样区分
- 一整列unixtime(时间戳)怎么在mysql中统一改成datetime格式并保存
datetime和timestamp的区别
datetime和timestamp是出现在MySQL和SqlServer数据库中的。
MySQL中datetime和timestamp的区别:
(一)范围不同。
“datetime” 以’YYYY-MM-DD HH:MM:SS’格式检索和显示DATETIME值。支持的范围为’1000-01-01 00:00:00’到’9999-12-31 23:59:59’TIMESTAMP值不能早于1970或晚于2037
(二)储存不同。
1,TIMESTAMP
①4个字节储存(Time stamp value is stored in 4 bytes)
②值以UTC格式保存( it stores the number of milliseconds)
③时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。
2,datetime
①8个字节储存(8 bytes storage)
②实际格式储存(Just stores what you have stored and retrieves the same thing which you have stored.)
③与时区无关(It has nothing to deal with the TIMEZONE and Conversion.)
注:TIMESTAMP列的显示格式与datetime列相同。
SqlServer中datetime和timestamp在中用法区别基本都差不多。
datetime :
SqlServer中用两个 4 字节的整数内部存储 datetime 数据类型的值。第一个 4 字节存储 base date(即 1900 年 1 月 1 日)之前或之后的天数。基础日期是系统参考日期。不允许早于 1753 年 1 月 1 日的 datetime 值。另外一个 4 字节存储以午夜后毫秒数所代表的每天的时间。
注:smalldatetime 数据类型存储日期和每天的时间,但精确度低于 datetime。SQL Server 将 smalldatetime 的值存储为两个 2 字节的整数。第一个 2 字节存储 1900 年 1 月 1 日后的天数。另外一个 2 字节存储午夜后的分钟数。日期范围从1900 年 1 月 1 日到 2079 年 6 月 6 日,精确到分钟。
timestamp:timestamp 这种数据类型表现自动生成的二进制数,确保这些数在数据库中是唯一的。timestamp 一般用作给表行加版本戳的机制。存储大小为 8 字节。
DateTime是值类型还是引用类型
首先,它肯定是值类型。首先说说什么类型是值类型,例如:int、float、bool之类的基础类型,以及用struct定义的类型,如:DateTime。除此外,如string,数组,以及用class定义的类型等都是引用类型。对于C#来说,很难罗列出所有类型进行一一分别,这需要自己在编码过程中进行分析总结。 为了更好地说明两种类型之间的区别,借用如下的表格来说明。 值类型 引用类型 内存分配地点 分配在栈中 分配在堆中 效率 效率高,不需要地址转换 效率低,需要进行地址转换 内存回收 使用完后,立即回收 使用完后,不是立即回收,等待GC回收 赋值操作 进行复制,创建一个同值新对象 只是对原有对象的引用 函数参数与返回值 是对象的复制 是原有对象的引用,并不产生新的对象 类型扩展 不易扩展 容易扩展,方便与类型扩展 通过如上细致对比,大家对于值类型和引用类型有个清楚的概念。 不过,无论是对于值类型还是引用类型来说,对于其作为函数参数或者返回值的时候,都是容易犯错误的地方。 对于值类型来说,当其作为函数参数的时候,希望在函数中被修改,那么直接如下操作是不能被修改的。public void Increment( int i ){ i++;} 要想在函数中对传进去的参数做真正的修改,需要借助于ref这个关键字,那么正确的形式如下。public void Increment( ref int i ){ i++;} 也就是说,如果需要在函数中对值类型参数进行修改,需要用ref或者out进行标识才能真正实现。 而对于引用类型来说,当其作为函数参数的时候,它所遇到的情况恰恰与值类型相反,即不希望在函数中被修改,举例如下。public void AddValue( MyType typValue ){ typValue.Count = typValue.Count + 15;} 由于对于引用类型对象来说,其的赋值操作只是对原有对象的引用,因此在函数对其修改,实际上是直接修改了原有对象数据,这是很多情况不希望发生的(这里例如对数组或者DataTable操作这类)。 为了防止这种事发生,需要给此类型提供clone函数。例如对于如上的类型,可以入下实现。public class MyType:ICloneable{ private int nCount = 0; public int Count { set{ nCount = value;} get{ return nCount;} } public MyType() {} public MyType( int Value) { nCount = Value; } #region ICloneable Members public object Clone() { // TODO: Add MyType.Clone implementation return new MyType( nCount ); } #endregion} 那么在调用的时候,用当前的对象的clone作为参数即可。 不过对于引用类型来说,提供一个clone函数不是一件容易的事情,尤其出现引用类型嵌套的时候,所以说去实现一个完全clone功能是件很费事又不讨好的活,这也就是在论坛中常说的深copy和浅copy的问题。话虽如此,如果对于前面所说的有个大概了解,相信实现也不是不可能。 在C#中,尤其自己定义类型的时候,常常由于是用struct来定义还是用class来定义,即是定义一个值类型还是一个引用类型呢。在这本书上给了几个判定条件,如果如下几点都满足的话,建议用struct来定义为值类型,否则用class定义为引用类型。《!--[if !supportLists]--》1. 《!--[endif]--》这个类型是否主要为了数据存储;《!--[if !supportLists]--》2. 《!--[endif]--》是否只通过属性来访问对象的数据成员;《!--[if !supportLists]--》3. 《!--[endif]--》这个类型是否不会有子类型;《!--[if !supportLists]--》4. 《!--[endif]--》在程序处理的时候不会把这个类型对象通过多态来处理。
datetime时间格式
1、首先在matlab中,在命令行输入clock,即可获取当前的时间的时间向量形式。
2、还可以通过在命令行输入now,获取当前时间双精度形式。
3、datetime:如果想要获取的时间为datetime类型数据,可以直接在命令栏中输入datetime数据。
4、datenum:matlab对时间,有自己的计算方法,从公元0前开始计算的天数,将当天的时间即为小数。将上述数据类型转换为双精度型数字。
5、最后将datetime类型数据转化为字符串的形式,进行使用,就完成了。
smalldatetime 和 datetime有什么区别
1、一直以为smalldatetime和datetime的差别只是在于时间范围: smalldatetime的有效时间范围1900/1/1~2079/6/6datetime的有效时间范围1753/1/1~9999/12/31所以我判断如果该值不用到太远的日期范围,就会使用smalldatetime。2、但我忽略了更关键的差别,那就是smalldatetime只精准到分,而datetime则可精准到3.33毫秒。因此,当我怎么存,秒都是00后,才发现原来是smalldatetime惹的祸,待我将类型别改成datetime后,秒的部份就可以正常储存了。*****************************************************************************************SQL Server中,smalldatetime只能精确到分钟,而datatime可以精确到3%秒(3.33毫秒)。smalldatetime占用4个字节,前2个字节存储base date(1900年1月1日)之后的天数。后2个字节存储午夜后的分钟数。datetime占用8个字节,前4个字节存储base date(即1900年1月1日)之前或之后的天数,后4个字节存储午夜后的毫秒数。由于datetime的精度是3%秒,这就涉及到小数,毫秒之前可以是冒号,也可以是小数点。使用冒号时表示的意义同时分秒间隔,11:11:11:21表示021毫秒,前面的0省略,而小数点表示的意义同数学上的小数点,如11:11:11.21表示210毫秒,省略的是后面的0。
date,datetime,time timestamp 用法怎样区分
DATE只显示日期,没有时间部分。MySQL检索并且以’YYYY-MM-DD’格式显示DATE值,支持的范围是 ’1000-01-01’到’9999-12-31’。 DATETIME是日期和时间的组合。MySQL检索并且以’YYYY-MM-DD HH:MM:SS’格式显示DATETIME值,但允许使用字符串或数字为DATETIME列分配值。支持的范围是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’ TIME数据类型表示一天中的时间。MySQL检索 并且以“HH:MM:SS“格式显示TIME值,但允许使用字符串或数字为TIME列分配值。支持范围是’00:00:00’到’23:59:59’。 TIMESTAMP[(M)]时间戳。范围是’1970-01-01 00:00:00’到2037年。TIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间。如果不分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间。也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。TIMESTAMP值返回后显示为’YYYY-MM-DD HH:MM:SS’格式的字符串,显示宽度固定为19个字符。如果想要获得数字值,应在TIMESTAMP 列添加+0。
一整列unixtime(时间戳)怎么在mysql中统一改成datetime格式并保存
写过PHP+MySQL的程序员都知道有时间差,UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储、处理方便,但是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以有的时候需要互相转换,下面给出互相转换的几种转换方式。 一、在MySQL中完成 这种方式在MySQL查询语句中转换,优点是不占用PHP解析器的解析时间,速度快,缺点是只能用在数据库查询中,有局限性。 1. UNIX时间戳转换为日期用函数: FROM_UNIXTIME() 一般形式:select FROM_UNIXTIME(1156219870); 2. 日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() 一般形式:Select UNIX_TIMESTAMP(’2006-11-04 12:23:00′); 举例:mysql查询当天的记录数: $sql=”select * from message Where DATE_FORMAT(FROM_UNIXTIME(chattime),’%Y-%m-%d’) = DATE_FORMAT(NOW(),’%Y-%m-%d’) order by id desc”; 当然大家也可以选择在PHP中进行转换,下面说说在PHP中转换。 二、在PHP中完成 这种方式在PHP程序中完成转换,优点是无论是不是数据库中查询获得的数据都能转换,转换范围不受限制,缺点是占用PHP解析器的解析时间,速度相对慢。 1. UNIX时间戳转换为日期用函数: date() 一般形式:date(’Y-m-d H:i:s’, 1156219870); 2. 日期转换为UNIX时间戳用函数:strtotime() 一般形式:strtotime(’2010-03-24 08:15:42’);