昨天写一个同步数据库的模块  从一个数据库同步到另外一个数据库,因为数据较多,不可能一次性全部搬迁过去,所以就按照每天搬迁!

写了一个 模块,点击加1,只要点击一次,自动从A数据库取出1天的数据, 并插入到B数据库,

在代码中你可能看到 计算时间的时候用到了 时间戳,并且时间戳加了好多 ‘0’ 是因为那是sqlserver 是公司java同事写的,为了PHP计算的时间戳与之匹配,

所以通过加‘0’之后  对比 时间戳取出一天的数据!

这里顺便整理一下 java和PHP之间的时间戳的区别!

java 时间戳和PHP时间戳 的转换 php time()
总结一下java 时间戳和PHP时间戳 的转换问题:
由于精度不同,导致长度不一致,直接转换错误。
JAVA时间戳长度是13位,如:1294890876859
PHP时间戳长度是10位, 如:1294890859 主要最后三位的不同,JAVA时间戳在PHP中使用,去掉后三位,如:1294890876859-> 1294890876 结果:2011-01-13 11:54:36 echo date('Y-m-d H:i:s','1294890876'); 复制代码
PHP时间戳在JAVA中使用,最后加三位,用000补充,如:1294890859->1294890859000
结果:2011-01-13 11:54:19 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateTime = df.format(1294890859000L);
System.out.println(df); 复制代码 总结一下java时间戳和PHP时间戳 的转换问题:
由于精度不同,导致长度不一致,直接转换错误。
JAVA时间戳长度是13位,如:1294890876859
PHP时间戳长度是10位, 如:1294890859 主要最后三位的不同,JAVA时间戳在PHP中使用,去掉后三位,如:1294890876859-> 1294890876 结果:2011-01-13 11:54:36
echo date('Y-m-d H:i:s','1294890876'); PHP时间戳在JAVA中使用,最后加三位,用000补充,如:1294890859->1294890859000
结果:2011-01-13 11:54:19
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateTime = df.format(1294890859000L);
System.out.println(df);

下面整理下我自己写的代码!方便日后查阅,类是用CI写的!

<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 14-12-23
* Time: 下午4:27
*/ class Sync extends My_Controller { /**
* @var hr伴侣数据库的实例
*/
private $hrdb; private $year ; private $month ; private $date ; private $month_31 = array(1,3,5,7,8,10,12); private $month_30 = array(4,6,9,11); private $startTimeStamp;
private $recursionCount = 0;//递归计数 public function __construct() {
parent::__construct();
header("Content-type:text/html;charset=utf-8");
date_default_timezone_set('PRC');
$this->load->model('sync_mdl');
$this->hrdb = $this->sync_mdl->getSqlServer();
} public function action() { $beginYear = $this->input->post('beginYear');
$beginMonth = $this->input->post('beginMonth');
$beginDay = $this->input->post('beginDay');
$endYear = $this->input->post('endYear');
$endMonth = $this->input->post('endMonth');
$endDay = $this->input->post('endDay'); if( !empty($beginYear) && !empty($beginMonth) && !empty($beginDay) && empty($endYear) && empty($endMonth) && empty($endDay)) {
//自定义开始同步时间,默认同步1天
$this->year = $beginYear; $this->month = $beginMonth; $this->date = $beginDay;
$this->startTimeStamp = $this->getTimeStamp($this->year, $this->month, $this->date); $result = $this->fetchOneDayData($this->startTimeStamp, $this->computeTime()); } else if( !empty($beginYear) && !empty($beginMonth) && !empty($beginDay) && !empty($endYear) && !empty($endMonth) && !empty($endDay) ) {
//自定义开始 结束的同步时间
$endTimeStamp = $this->getTimeStamp($endYear, $endMonth, $endDay); $result = $this->fetchOneDayData( $this->startTimeStamp, $endTimeStamp ); } else { echo '<p style="color:red">时间不能为空</p>'; } //if(!empty( array('mobile')) ) {
//就用电话创建账号
//} else if(email 不为空) {
//就用邮箱创建账号
//} else {
//不做任何操作
//} //如果数据不为空,判断mobile 或者 email 是否存在于小职了 //以上通过,便进行插入到小职了的数据库 // echo $this->startTimeStamp; echo '<br/>';
//echo $this->computeTime();
//当前取值的数据; $data['year'] = $this->year;
$data['month'] = $this->month;
$data['day'] = $this->date;
$this->load->view('sync', $data);
echo '<pre/>';
if( !empty($result) ) {
print_r($result);
} else if(isset($result) && $result == 'today') {
echo '已经到今天了!';
} else if( empty($rs) ) {
echo '本日无数据可同步';
}
} /**取出一天的数据, 只要计算的当天数据为空,递归调用,直到当天有数据
* @param $startTimeStamp 开始时间戳
* @param $endTimeStamp 结束时间戳
* @return mixed 返回一天的数据
*/
private function fetchOneDayData($startTimeStamp, $endTimeStamp) { if($startTimeStamp == $endTimeStamp) { return 'today'; } else { $rs = $this->fetchHrData($startTimeStamp, $endTimeStamp);
if(empty($rs)) {
return array();
} else if( !empty($rs) ) {
return $rs;
} // if(!empty($rs)) {
//
// return $rs;
//
// } else if(empty($rs)) {
// $this->recursionCount = $this->recursionCount + 1;
// $this->startTimeStamp = $endTimeStamp;
// if($this->recursionCount < 50) {
// //echo '<strong>'.$this->recursionCount.'</strong>';
// //如果数据不为空的时候,这里接收到本身调用自己返回的数组,并返回
// $re = $this->fetchOneDayData($this->startTimeStamp, $this->computeTime());
// return $re;
//
// } else {
// return '超过50天没有数据了';
// } // }
}//end else
} /**根据时间取出每天数据
* @param $beginTime
* @param $endTime
*/
private function fetchHrData($beginTime, $endTime) { $sql = "SELECT truename,pubdate FROM resume_cn WHERE pubdate >= $beginTime AND pubdate <= $endTime";
$query = $this->hrdb->query($sql);
$rs = $query->result_array();
//echo '<pre/>';
return $rs;
// print_r($rs);
//$this->test($rs[9]['pubdate'])
} /**计算年份是否是闰年,如果是闰年 2月份是29天 平年是28天, 每调用一次这个函数,天数增 加1天
* @return string 时间戳,是经过计算的,前加 '00' 后加'000' ,为了与hr伴侣的时间戳相匹配
*/
private function computeTime() {
if (($this->year % 4 == 0 && $this->year % 100 != 0) || ($this->year % 400 == 0)) {
$this->computeTimeDate(29);
return $this->getTimeStamp($this->year, $this->month, $this->date);
} else {
$this->computeTimeDate(28);
return $this->getTimeStamp($this->year, $this->month, $this->date);
}
} /**根据2月份是多少天,计算日期时间,
* @param $Feb 2月的天数
*/
private function computeTimeDate($Feb) { if ($this->month == 2) { if($this->date >= 1 && $this->date <= $Feb) {
$this->date = $this->date + 1;
} else if($this->date > $Feb) {
$this->computeDateMonth();
} else {
die('2月份天数不在正常范围内');
} } else if( in_array($this->month, $this->month_30) ) { if( $this->date >= 1 && $this->date < 30 ) {
$this->date = $this->date + 1;
} else if($this->date >= 30){
$this->computeDateMonth();
} else {
die('30天的月份天数不在正常范围内');
} } else if(in_array($this->month, $this->month_31)) { if( $this->date >= 1 && $this->date < 31 ) {
$this->date = $this->date + 1;
} else if( $this->date >= 31 ){
$this->computeDateMonth();
} else {
die('31天的月份天数不在正常范围内');
} } else {
// echo $this->month;
die('年月日不正确');
}
} /**
* 计算一年当中的月份是否为12个月,如果超过12 就让年份 +1
*/
private function computeDateMonth() {
if($this->month >= 1 && $this->month < 12) {
$this->month = $this->month + 1;
$this->date = 1;
} else if($this->month == 12) {
if( $this->year == date('Y', time()) ) {
return;
} else {
$this->year = $this->year + 1;
$this->month = 1;
$this->computeTime();
}
} else {
die('computeDateMonth函数计算错误');
}
} /**获取用于与HR数据库对比的时间戳,如果定义了年月日 就用定义的时间,否则就取当前时间
* @param $y 年
* @param $m 月
* @param $d 日
* @param $h 小时
* @param $i 分钟
* @param $s 秒
* @return string 时间戳
*/
private function getTimeStamp($y = '', $m = '', $d = '', $h = '0', $i = '0', $s = '0') {
if( $y && $m && $d) {
return '00' . mktime( $h, $i, $s, $m, $d, $y ) . '000';
} else {
return '00' . time() . '000';
}
} } /* End of file Sync.php */
/* Location: controllers/sync.php */

计算日期时间 自动加1天 PHP计算闰年 java与PHP时间戳对比区别的更多相关文章

  1. js正则格式化日期时间自动补0

    原文 js正则格式化日期时间自动补0 背景 时间日期格式化的需求很常见,也有很多工具类转换方法,比如需要将2022-3-4这种日期格式转化为2022-03-04,也就是实现个位数月份或天数日期自动前置 ...

  2. Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年

    计算年.月.日需要安装组件包 pip install python-dateutil 当前日期时间 import datetime print datetime.datetime.now() # 20 ...

  3. java设定一个日期时间,加几分钟(小时或者天)后得到新的日期

    //返回的是字符串型的时间,输入的 //是String day, int x public static String addDateMinut(String day, int x){ SimpleD ...

  4. C# 计算日期时间的间隔天数

    DateTime oldDate = ,,); DateTime newDate = DateTime.Now; // Difference in days, hours, and minutes. ...

  5. JAVA中计算两个日期时间的差值竟然也有这么多门道

    上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看.题目很简单: 给定一个日期,然后计算下距离今天相差的天数. 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼 ...

  6. Oracle中与日期时间有关的运算函数

    1            ADD_MONTHS 格式:ADD_MONTHS(D,N) 说明:返回日期时间D加N月后对应的日期时间.N为正时则表示D之后:N为负时则表示为D之前:N为小数则会自动先删除小 ...

  7. 【转】JAVA 8 日期/时间(Date Time)API指南

    前言 本来想写下Java 8的日期/时间API,发现已经有篇不错的文章了,那就直接转载吧~ PS:主要内容没变,做了部分修改. 原文链接: journaldev 翻译: ImportNew.com - ...

  8. ORACLE函数之日期时间运算函数

    1            ADD_MONTHS 格式:ADD_MONTHS(D,N) 说明:返回日期时间D加N月后相应的日期时间.N为正时则表示D之后:N为负时则表示为D之前.N为小数则会自己主动先删 ...

  9. Java8学习笔记(九)--日期/时间(Date Time)API指南

    Java 8日期/时间( Date/Time)API是开发人员最受追捧的变化之一,Java从一开始就没有对日期时间处理的一致性方法,因此日期/时间API也是除Java核心API以外另一项倍受欢迎的内容 ...

随机推荐

  1. c# 使用hook来监控鼠标键盘事件的示例代码

    如果这个程序在10几年前,QQ刚刚兴起的时候,有了这个代码,就可实现盗号了. 当然使用钩子我们更多的是实现"全局快捷键"的需求. 比如 程序最小化隐藏后要"某快捷键&qu ...

  2. Java多线程技术学习笔记(一)

    目录: 概述 多线程的好处与弊端 JVM中的多线程解析 多线程的创建方式之一:继承Thread类 线程的状态 多线程创建的方式之二:实现Runnable接口 使用方式二创建多线程的好处 多线程示例 线 ...

  3. POJ 3159 Candies(SPFA+栈)差分约束

    题目链接:http://poj.org/problem?id=3159 题意:给出m给 x 与y的关系.当中y的糖数不能比x的多c个.即y-x <= c  最后求fly[n]最多能比so[1] ...

  4. java Date比较

    package com.horizon.test; import org.apache.commons.lang.time.DateUtils; public class Hello3 { publi ...

  5. iOS开发——UI篇Swift篇&UIAlertView/UIActionSheet

    UIAlertView/UIActionSheet UIAlertView //一个按钮的提醒 @IBAction func oneButtonAler() { //创建单一按钮提醒视图 let on ...

  6. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  7. 暂时解决Sublime Text 2不支持input问题(转)

    (1)打开当前python文件 (2)然后 Tools -> Command Palette (3)SublimeREPL Python RUN current file (4)就会打开新窗口, ...

  8. listen和accept函数

    listen函数是用来设置监听连接的句柄和队列 当listen函数执行完成以后,服务端就已经可以接受客户端来的新连接了,新连接完成以后listen会把客户端的ip,port和连接句柄放在监听队列里面, ...

  9. Repeater的ItemCreated和ItemDataBind的区别

    Repeater 的ItemCreated的事件在第一次调用DataBind方法的时候触发,即在(IsPostBack==false)的时候才调用,当页面回滚是将不是调用该方法(错误的源头).而Ite ...

  10. 经典排序算法总结与实现 ---python

    原文:http://wuchong.me/blog/2014/02/09/algorithm-sort-summary/ 经典排序算法在面试中占有很大的比重,也是基础,为了未雨绸缪,在寒假里整理并用P ...