请教WINDOWS怎么批量转换时间戳
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教WINDOWS怎么批量转换时间戳相关的知识,希望对你有一定的参考价值。
参考技术A 时间戳就是如1377216000000 这种格式,在mysql数据库中会经常用到把时间转换成时间戳或把时间戳转换成日期格式了,下面是时间戳操作转换方法:一、原理
时间戳的原理是把时间格式转为十进制格式,这样就方便时间的计算
如: 2013年08月23日 转化后是 1377216000000
二、步骤
1、创建 DateUtilsl类。
代码如下:
importjava.text.ParseException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
/*
* @author Msquirrel
*/
public class DateUtils
privateSimpleDateFormat sf = null;
/*获取系统时间 格式为:"yyyy/MM/dd "*/
public static String getCurrentDate()
Date d = newDate();
sf = newSimpleDateFormat("yyyy年MM月dd日");
returnsf.format(d);
/*时间戳转换成字符窜*/
public static String getDateToString(long time)
Date d = newDate(time);
sf = newSimpleDateFormat("yyyy年MM月dd日");
returnsf.format(d);
/*将字符串转为时间戳*/
public static long getStringToDate(String time)
sdf = newSimpleDateFormat("yyyy年MM月dd日");
Date date = newDate();
try
date = sdf.parse(time);
catch(ParseException e)
// TODO Auto-generated catch block
e.printStackTrace();
returndate.getTime();
2、在对应使用的地方调用。
代码如下:
DateUtils.getCurrentDate(); //获取系统当前时间
DateUtils.getDateToString(时间戳); //时间戳转为时间格式
DateUtils.getStringToDate("时间格式");//时间格式转为时间戳.
将日期时间列值批量转换和更新为 UNIX 时间戳?
【中文标题】将日期时间列值批量转换和更新为 UNIX 时间戳?【英文标题】:Bulk convert and update datetime column values to UNIX timestamp? 【发布时间】:2013-04-27 09:30:48 【问题描述】:背景
我有一个包含大约 1600 万条记录的 MySQL 数据库。有 2 列 created_at
和 updated_at
目前采用 datetime
格式。
问题
我想通过转换所有值并使用新值更新记录来将其更改为 UNIX Timestamp
。
我知道如何在循环中使用 PHP 执行此操作,但有没有办法通过在 MySQL 中执行单个查询来执行此更新?
【问题讨论】:
两个原因; 1 学习方面;和 2,因为我认为它会为我节省 250+ MB 的存储空间以及等量的 Index。当我使用不稳定的互联网连接时,从云端进行离线备份会稍微容易一些。 【参考方案1】:因为这将是一次性更改;你可以这样继续:
使用INT
数据类型创建新列,并将它们命名为created
和updated
。
ALTER TABLE `nameOfTable`
ADD COLUMN `created` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `created_at`,
ADD COLUMN `updated` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `updated_at`;
更新表:
UPDATE `nameOfTable`
SET `created` = UNIX_TIMESTAMP( `created_at` ),
`updated` = UNIX_TIMESTAMP( `updated_at` );
删除旧列并将新列重命名为 created_at
和 updated_at
。
另一种方式:
-
将
DATETIME
列设置为VARCHAR
字段。
使用查询更新:
UPDATE `nameOfTable`
SET `created_at` = UNIX_TIMESTAMP( `created_at` ),
`updated_at` = UNIX_TIMESTAMP( `updated_at` );
将列更改为INT
。
【讨论】:
成功了,谢谢!顺便说一句,以时间戳格式保存是否可以节省超过 1600 万条记录的空间? @Reddox ***.com/questions/2533767/… 和 ***.com/questions/2948494/unix-timestamp-vs-datetime 第二个查询非常漂亮。再次感谢! 如果您想要毫秒或微秒,您可能应该为您的列类型选择“BIGINT”(64 位,与 java long 和 c# long/int64 相同),加上 2038 只是在角落附近。 :)【参考方案2】:hjpotter92 的回答很有帮助。
但在我的情况下,它并没有立即解决问题,因为我存储的日期的格式不被 UNIX_TIMESTAMP 接受为参数。
所以我必须先将其转换为可接受的格式。经过一番研究,我得到了以下查询:
UPDATE tableName set newFieldName = UNIX_TIMESTAMP(STR_TO_DATE(CAST(priorFieldName AS CHAR), '%m/%d/%y'));
【讨论】:
以上是关于请教WINDOWS怎么批量转换时间戳的主要内容,如果未能解决你的问题,请参考以下文章