Timestamp的作用及与字符串的相互转换

 一.Timestamp的介绍

每一个数据库都有一个计数器,这个计数器记录着数据行的插入、更新行为。如果我们为一个表中增加 timestamp 列,那么,该列将记录每一个数据行的计数器值。假如数据库中当前的计数器是 20(实际中不是数字类型,为了方便解释,这里用数字类型):那么在表 A 中插入一条记录后,插入行的 timestamp 为 21;然后更新表 B 的一条记录后,更新行的 timestamp 为 22;现在再更新刚才插入的行,此时其 timestamp 为 23。可以看出,每个行都有一个 timestamp,并且是在数据库的所有表中唯一的,当更新行时,被更新的行的 timestamp 会加 1。注意删除不影响计数器。 timestamp 作用:timestamp 就是设计来避免更新冲突的,当然还有其它一些作用,比如 SQL Server 全文索引时用以增量填充。我们只需要添加一个为 timestamp 类型的列就可以了,它会自动记下当前计数器的值。一个表只能有一个 timestamp 列,并且不能将该列作为主键。不可为空的 timestamp 列在语义上等价于 binary(8) 列;可为空的 timestamp 列在语义上等价于 varbinary(8) 列。

二.timestamp的 应用

1.利用 timestamp 来避免更新冲突。

比如一个内容管理系统,A 正在编辑某一篇文章,B 也正在编辑该文章,A 和 B 都不知道对方在编辑这篇文章,双方保存后,都以为已经成功保存,实际上,数据库中只保存了最后提交的记录(先提交的记录被覆盖),这就造成了数据库中的数据与操作者所认为的不一样。 要避免这种更新冲突,一种方法可以采用模拟锁的形式,一个人在编辑另一个人就不允许编辑,但比较麻烦,由于这种更新冲突并非常见,投入较大精力在这上面,不值。这里使用 timestamp 轻松实现避免更新冲突。

1、表中增加一个字段 tmstmp,类型为 timestamp,参见SQL Server中timestamp(时间戳)。

2、编辑文章时。增加一个隐藏域 <input type="hidden" name="timestamp" value="<%=rs("tmstmp")%>">,(如何显示timestamp的值: select (字段名+0) as 别名)。

3、更新文章时。 sql = "update ... where id=" & id & " and tmstmp=" & tmstmp   conn.Execute sql, effectLines if effectLines <= 0 then '更新失败,可能是原记录不存在,或者更新冲突 end if SQL Server中timestamp(时间戳)

2.判断最新版本

比如,字段的标识列属性(数据类型为数值型):在插入新行时自动添加; 而,字段的数据类型为时间戳类型:每行更新时数据库自动更新此行的此字段的值; 我们知道数字类型有个“标识”属性,设置好“标识种子”、“标识递增量”,每增加一条记录时,这个字段的值就会在最近的一个标识值基础上自动增加,这样我们可以知道哪些记录是先添加的,哪些记录是后添加的,但是我们无法知道哪些记录修改过。timestamp这个类型的字段呢,每增加一条记录时,它会在最近的一个时间戳基础上自动增加,当修改某条记录时,它也会在最近的一个时间戳基础上自动增加,所以我们就知道哪些记录修改过了。

三.几个疑问

1.timestamp 会重复吗?

可能会,在使用 select into 时。

2.如何查看数据库中当前的 timestamp?

请使用 @@DBTS,比如在查询分析器中用:print @@DBTS。

3.增、改没有 timestamp 列的表数据时,@@DBTS 会变吗?

不会。

4.如何显示timestamp的值

有朋友反应response.Write(rs("[timestamp]")),是一片空白,可是在查询分析器中看到的是一串数字。这种情况下,在写SQL语句时这样写,select (字段名+0) as 别名,输出时就会有显示了。(0x000000000000FACC)

5.如何显示当前数据库的时间戳

查询分析器中 print @@DBTS

四.与字符串的相互转换

转化为字符串的方法:

string text3 = "0x" +BitConverter.ToString((byte[]) row["timestamp字段名"]);


将字符串转化为timestamp,请调用下面的方法

 public byte[] HexTextToByteArray(string hexText)
        {
            byte[] buffer2;
            try
            {
                byte[] buffer = null;
                string hexString = hexText.Replace("0x", "");
                int num = 0;
                int num2 = hexString.Length / 2;
                buffer = new byte[num2];
                for (int i = 0; i < buffer.Length; i++)
                {
                    string s = new string(new char[] { hexString[num], hexString[num + 1] });
                    buffer[i] = byte.Parse(s, NumberStyles.HexNumber);
                    num += 2;
                }
                buffer2 = buffer;
            }
            return buffer2;
        }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaScript的日期可以使用时间戳或日期字符串来表示。时间戳是一个数字,表示自1970年1月1日以来的毫秒数。日期字符串则是一段字符串,包含具体的日期和时间信息。在JavaScript,我们可以通过以下方式将时间戳转换为日期字符串: ```javascript const timestamp = 1632797697000; // 时间戳 const dateStr = new Date(timestamp).toLocaleString(); // 将时间戳转换为日期字符串 console.log(dateStr); // '2021/9/28 上午10:01:37' ``` 在上面的代码,我们使用Date对象的toLocaleString()方法将时间戳转换为本地日期字符串。如果需要转换为其他格式的日期字符串,可以使用其它Date对象的方法。 同样,我们也可以将日期字符串转换为时间戳: ```javascript const dateStr = '2021/9/28 上午10:01:37'; // 日期字符串 const timestamp = new Date(dateStr).getTime(); // 将日期字符串转换为时间戳 console.log(timestamp); // 1632797697000 ``` 在上面的代码,我们使用Date对象的getTime()方法将日期字符串转换为时间戳。需要注意的是,如果日期字符串的格式不正确,则无法正确地转换为时间戳。因此,在实际使用,需要根据具体的日期格式来进行转换。 ### 回答2: JavaScript 时间戳和日期字符串相互转换是 Web 开发经常用到的操作,本文将详细介绍这两种类型之间的转换方法。 一、JavaScript 时间戳 JavaScript 时间戳是指从 1970 年 1 月 1 日 00:00:00 UTC(世界标准时间)到某个时间点的毫秒数。JavaScript 可以使用 Date 对象获取当前时间的时间戳,示例代码如下: ```javascript var timestamp = new Date().getTime(); // 获取当前时间的时间戳 ``` 二、JavaScript 日期字符串 JavaScript 日期字符串是指使用一定的格式表示日期的字符串,常见的格式包括: - "YYYY-MM-DD":表示年月日,如 "2021-07-01"; - "YYYY-MM-DD HH:mm:ss":表示年月日时分秒,如 "2021-07-01 11:35:12"。 JavaScript 可以使用 Date 对象将时间戳转换为日期字符串,示例代码如下: ```javascript var timestamp = 1627082112060; // 假设时间戳为 2021-07-24 16:08:32 var date = new Date(timestamp); var dateString = date.toLocaleString(); // 转换为本地日期时间字符串 console.log(dateString); // 输出 "2021/7/24 下午4:08:32" ``` 在上面的代码,我们首先创建了一个 Date 对象,并传入了一个时间戳作为参数。然后通过 toLocaleString 方法将其转换为了本地日期时间字符串。需要注意的是,toLocaleString 方法的输出结果会受到当前操作系统、浏览器等环境的影响,可能会存在差异。 如果想要自定义日期字符串的格式,可以使用 Date 对象的 getFullYear、getMonth、getDate 等方法获取年、月、日等信息,然后使用字符串拼接的方式生成日期字符串。示例如下: ```javascript var timestamp = 1627082112060; // 假设时间戳为 2021-07-24 16:08:32 var date = new Date(timestamp); var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); var hour = date.getHours(); var minute = date.getMinutes(); var second = date.getSeconds(); var dateString = year + '-' + addZero(month) + '-' + addZero(day) + ' ' + addZero(hour) + ':' + addZero(minute) + ':' + addZero(second); console.log(dateString); // 输出 "2021-07-24 16:08:32" function addZero(num) { return num < 10 ? '0' + num : num; } ``` 在上面的代码,我们使用了一个 addZero 函数将月、日、时、分、秒字符串转换为两位数的格式,使得最终生成的日期字符串符合了常见的格式要求。 三、总结 JavaScript 时间戳和日期字符串是常见的日期和时间表示方式,在 Web 开发经常用到。JavaScript 的 Date 对象提供了丰富的 API,可以方便地进行时间戳和日期字符串之间的转换。需要注意的是,toLocaleString 方法输出的本地日期时间字符串可能会受到环境的影响,生成自定义格式的日期字符串需要手动拼接各个日期时间部分。 ### 回答3: JavaScript的时间戳和日期字符串是常用的表示时间的方式。时间戳是指从1970年1月1日0时0分0秒(UTC)到指定时间之间的毫秒数。日期字符串则是一个格式化后的字符串,如'2022-01-01 12:00:00'表示2022年1月1日午12点整。在JavaScript,我们可以通过一些函数来实现时间戳和日期字符串相互转换。 1. 将日期字符串转换成时间戳 我们可以使用JavaScript内置的Date对象的getTime()方法将日期字符串转换为时间戳。getTime()方法返回从1970年1月1日0时0分0秒(UTC)到该日期对象所表示时间的毫秒数。 代码示例: ``` let dateStr = '2022-01-01 12:00:00'; let timestamp = new Date(dateStr).getTime(); console.log(timestamp); // 1641038400000 ``` 在这个例子,我们首先定义了一个日期字符串dateStr,然后用new Date()方法将其转换成Date对象,并使用getTime()方法获取该日期对象的时间戳。最后我们打印了获取到的时间戳。 2. 将时间戳转换成日期字符串 同样使用Date对象,我们可以通过构造函数传入时间戳,然后使用toLocaleString()方法将其转换成日期字符串。 代码示例: ``` let timestamp = 1641038400000; let date = new Date(timestamp).toLocaleString(); console.log(date); // '1/1/2022, 12:00:00 PM' ``` 这个例子,我们首先定义了一个时间戳timestamp,然后使用new Date()方法将其转换成Date对象,并使用toLocaleString()方法将其转换成日期字符串。最后我们打印了转换后的日期字符串。 3. 自定义日期字符串格式 有时候,我们需要自定义日期字符串格式以满足我们的需求,比如将日期字符串格式化为'2022年01月01日 12时00分00秒'。我们可以使用Date对象的一些方法来实现该功能。 代码示例: ``` let timestamp = 1641038400000; let date = new Date(timestamp); let year = date.getFullYear(); let month = (date.getMonth() + 1).toString().padStart(2, '0'); let day = date.getDate().toString().padStart(2, '0'); let hours = date.getHours().toString().padStart(2, '0'); let minutes = date.getMinutes().toString().padStart(2, '0'); let seconds = date.getSeconds().toString().padStart(2, '0'); let formattedDate = `${year}年${month}月${day}日 ${hours}时${minutes}分${seconds}秒`; console.log(formattedDate); // '2022年01月01日 12时00分00秒' ``` 在这个例子,我们首先定义了一个时间戳timestamp,然后使用new Date()方法将其转换成Date对象,并使用Date对象的一些方法获取日期字符串的年月日时分秒信息。在获取时分秒信息时,我们还应该对结果进行处理,确保它们是两位数的。最后,我们使用字符串模板将各个时间信息拼接成我们需要的格式化后的日期字符串,并打印到控制台。 总结 JavaScript利用Date对象来实现时间戳和日期字符串相互转换很简单,只需要掌握几个基本的方法和技巧即可。同时,需要注意在进行日期字符串格式化时,应该对获取到的月、日、时、分、秒信息进行处理,确保它们都是两位数的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值