qiyadeng

专注于Java示例及教程
posts - 84, comments - 152, trackbacks - 0, articles - 34

这篇文章将使用两个例子计算两个日期的时间差。
1.使用Java SDK。
2.使用Joda库。
1.使用Java SDK
 计算两个Date之间的时间差,基本思路为把Date转换为ms(微秒),然后计算两个微秒时间差。时间的兑换规则如下:

1s秒 = 1000ms毫秒 1min分种 = 60s秒 1hours小时 = 60min分钟 1day天 = 24hours小时
package com.qiyadeng.date;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDifferentExample {
    
public static void main(String[] args) {
        String dateStart 
= "2013-02-19 09:29:58";
        String dateStop 
= "2013-02-20 11:31:48";

        SimpleDateFormat format 
= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        Date d1 
= null;
        Date d2 
= null;

        
try {
            d1 
= format.parse(dateStart);
            d2 
= format.parse(dateStop);

            
//毫秒ms
            long diff = d2.getTime() - d1.getTime();

            
long diffSeconds = diff / 1000 % 60;
            
long diffMinutes = diff / (60 * 1000% 60;
            
long diffHours = diff / (60 * 60 * 1000% 24;
            
long diffDays = diff / (24 * 60 * 60 * 1000);

            System.out.print(
"两个时间相差:");
            System.out.print(diffDays 
+ " 天, ");
            System.out.print(diffHours 
+ " 小时, ");
            System.out.print(diffMinutes 
+ " 分钟, ");
            System.out.print(diffSeconds 
+ " 秒.");

        } 
catch (Exception e) {
            e.printStackTrace();
        }

    }
}

运行结果:

两个时间相差:1 天, 2 小时, 1 分钟, 50 秒.

2.Joda时间库

package com.qiyadeng.date;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Hours;
import org.joda.time.Minutes;
import org.joda.time.Seconds;

public class JodaDateDifferentExample {
    
public static void main(String[] args) {
        String dateStart 
= "2013-02-19 09:29:58";
        String dateStop 
= "2013-02-20 11:31:48";

        SimpleDateFormat format 
= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        Date d1 
= null;
        Date d2 
= null;

        
try {
            d1 
= format.parse(dateStart);
            d2 
= format.parse(dateStop);

            DateTime dt1 
= new DateTime(d1);
            DateTime dt2 
= new DateTime(d2);

            System.out.print(
"两个时间相差:");
            System.out.print(Days.daysBetween(dt1, dt2).getDays() 
+ " 天, ");
            System.out.print(Hours.hoursBetween(dt1, dt2).getHours() 
% 24
                    
+ " 小时, ");
            System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() 
% 60
                    
+ " 分钟, ");
            System.out.print(Seconds.secondsBetween(dt1, dt2).getSeconds() 
% 60
                    
+ " 秒.");

        } 
catch (Exception e) {
            e.printStackTrace();
        }

    }
}

运行结果:

两个时间相差:1 天, 2 小时, 1 分钟, 50 秒.

原创文章,转载请注明: 转载自http://www.qiyadeng.com/

本文链接地址: Java计算日期和时间差

posted @ 2013-02-19 22:27 qiyadeng 阅读(15121) | 评论 (2)编辑 收藏

关于重复提交

前段时间和朋友邮件讨论过页面重复提交的问题,邮件记录如下。

问题:
  页面保证是保证的一部分。页面机制我这边采用的是操作结束前不能重做,服务端结束返回信息后,适当条件下(服务器忙)是允许重新操作的。

你说的唯一值保证页面不重复的方法,可以本页面再次提交呢?

解决办法:
  哈哈,还是流程图吧,有的时候更容易说清楚问题。应该回答了你的问题。

关于页面(我们叫前端吧)和后台(服务端)在判断中和校验中的关系,我认为的原则应该是:
1.如果前端和后端校验只能选一个的话,选择后端校验。可以都选的话,两者都需要。
2.前端校验可以检查一些格式错误或是基本校验,可以减轻服务器校验负担,也可以让用户更快知道自己错在哪里。
3.后台校验更擅长做的是逻辑校验,数据的格式可能都正确,但是发生的关系不正确或是重复数据,只有通过后台校验才能校验出来。

原创文章,转载请注明: 转载自http://www.qiyadeng.com/

本文链接地址: 关于重复提交

posted @ 2013-02-06 23:30 qiyadeng 阅读(1740) | 评论 (3)编辑 收藏

今天看到关于一个整数表示为n个连续整数和的问题。搜索了下找到如下文章:

表为连续正整数
View SlideShare document or Upload your own.

还搜索到程序的实现:http://blog.csdn.net/Solstice/archive/2006/09/13/1217700.aspx

http://squall.cs.ntou.edu.tw/cprog/Assignments/99Fall/FindGivenSum.html

http://blog.chinaunix.net/u2/76292/showart_1359876.html(这个是不正确的)

 

我也简单的实现了下:(g++编译,主要思路是利用等差数列求和公式n=(a+a+k)*(k+2)/2列举k,找到合适的a)

#include <iostream>
#include <math.h>
using namespace std;

int main(){

    int n;
    cout<<"input n:"<<endl;
    cin>>n;

    int maxk=(int)sqrt((double)n*2);

    int flag = 0;

    //cout<<"maxk="<<maxk<<endl;

    //for(int i=1;i<maxk+1;i++){
    for(int i=maxk+1;i>0;i--){
         double a = n/(double)(i+1)-i/(double)2;
        //cout<<"a="<<a<<endl;
    
        if(a>0&&a-(int)a==0){
            //cout<<i<<endl;
            for(int j=0;j<i+1;j++){
                cout<<a+j<<" ";
            }
            cout<<endl;
            flag=1;
        }

    }
    if(flag==0){
        cout<<"NONE"<<endl;
    }
    return 0;

}

posted @ 2009-01-19 16:37 qiyadeng 阅读(1909) | 评论 (3)编辑 收藏

posted @ 2008-12-05 00:08 qiyadeng 阅读(342) | 评论 (0)编辑 收藏

Mc Cain Resume
View SlideShare document or Upload your own.
Obama Resume
View SlideShare document or Upload your own.

  

事实上,媒体也非常认可这两份由专家为总统写作的简历,包括ABCNews,并将他们作为介绍总统候选人的核心提要。像其他的高端工作职位一样,只有更加有力地呈现自己作为候选人的资格,您才能成功获得工作职位。这就像美国的总统竞选一样。

这两份出色的简历,首先是非常简洁。人力资源经理,招聘经理或者猎头顾问没有时间去翻阅每个申请人的详细简历。因此要保持你的简历在1-2页之间,最多不超过2页。要把重点放在你最近15年的工作经历,对于工作经历丰富的高端候选人,你可能还需要对以往的一些工作做出简短的总结性说明。

其次,确保简历的整体布局清晰明白。简历要给人一个良好的视觉吸引力。简历的格式要编排有序。字体大小选择要正确,避免留下太多的空白,也要避免把一页纸塞得太满。整体效果上,简历应该突出高品位和专业化的特点。

这两个人的简历虽然没有得到官方的认可,但是我们认为这两份由专家写作的简历不仅呈现了他们卓越的任职资格,而且突出了他们最优秀的职业成就。这也是简历专家建议候选者首先要在简历中呈现的。因为卓越的任职资格和最优秀的职业成就是简历的核心内容。简历的大部分内容应当呈现你过去或现在的工作职责和“专业经验”标题下的职业成就。典型来讲,职业经验是以逆时序排列,从你最近的职位开始,列出公司名称,雇佣日期,担当的职务,也包括每一个职务你的重点工作内容和职责的简要概述。

最有效的简历,也应该包括每个工作所取得的工作成绩。工作成绩或者工作成就可以通过简要的,针对性的陈述来呈现,要证明你如何增加销售,降低费用,扩大市场份额等。

posted @ 2008-11-30 23:33 qiyadeng 阅读(609) | 评论 (1)编辑 收藏

8 月 24 日晚,在鸟巢国家体育场,当站在舷梯上的运动员慢慢卷起画轴、奥运圣火渐渐熄灭时,2008 北京奥运会,一届被国际奥委会主席罗格誉为“真正的无与伦比”的奥运会,正式与大家告别了。
与此同时,由 12 位特殊的运动员所组成的十二生肖代表队,也结束了它们奥运期间在谷歌 Doodle 舞台上的精彩表演。今天,就让我们再次回味一下它们在过去的十七天里带给我们的精彩吧!


8月8日开幕式(opening)


8月9日自行车(cycling)


8月10日举重(weightlifting)


8月11日跳水(diving)


8月12日艺术体操(rhythm)


8月13日吊环(rings)


8月14日篮球(basketball)


8月15日羽毛球(badminton)


8月16日足球(soccer)


8月17日赛艇(rowing)


8月18日乒乓球(pingpong)


8月19日游泳(swimming)


8月20日田径(trackfield)


8月21日跳高(highjump)


8月22日武术(martialarts)


8月23日棒球(baseball)


8月24日闭幕式(closing_ceremonies)

Google 黑板报 -- Google 中国的博客网志: 十二生肖代表队——谷歌 Doodle 08 特辑 (结束篇)

posted @ 2008-08-26 13:11 qiyadeng 阅读(367) | 评论 (0)编辑 收藏

 

Img702828_t

posted @ 2008-08-20 12:37 qiyadeng 阅读(403) | 评论 (2)编辑 收藏

极光是南北极地区特有的一种大气发光现象。极光在东西方的神话传说中都留下了美丽的身影,现代科学的发展,使人类能够用理性的眼光看待极光,对它作出科学的解释。
长期以来,极光的成因机理未能得到满意的解释。在相当长一段时间内,人们一直认为极光可能是由以下三种原因形成的。一种看法认为极光是地球外面燃起的大火,因为北极区临近地球的边缘,所以能看到这种大火。另一种看法认为,极光是红日西沉以后,透射反照出来的辉光。还有一种看法认为,极地冰雪丰富,它们在白天吸收阳光,贮存起来,到夜晚释放出来,便成了极光。总之,众说纷纭,无一定论。直到20世纪60年代,将地面观测结果与卫星和火箭探测到的资料结合起来研究,才逐步形成了极光的物理性描述。

现在人们认识到,极光一方面与地球高空大气和地磁场的大规模相互作用有关,另一方面又与太阳喷发出来的高速带电粒子流有关,这种粒子流通常称为太阳风。由此可见,形成极光必不可少的条件是大气、磁场和太阳风,缺一不可。具备这三个条件的太阳系其他行星,如木星和水星,它们的周围,也会产生极光,这已被实际观察的事实所证明。

地磁场分布在地球周围,被太阳风包裹着,形成一个棒槌状的胶体,它的科学名称叫做磁层。为了更形象化,我们打这样一个比方。可以把磁层看成一个巨大无比的电视机显像管,它将进入高空大气的太阳风粒子流汇聚成束,聚焦到地磁的极区,极区大气就是显像管的荧光屏,极光则是电视屏幕上移动的图像。但是,这里的电视屏幕却不是 18英寸或 24英寸,而是直径为4000公里的极区高空大气。通常,地面上的观众,在某个地方只能见到画面的l/50。在电视显像管中,电子束击中电视屏幕,因为屏上涂有发光物质,会发射出光,显示成图像。同样,来自空间的电子束,打入极区高空大气层时,会激发大气中的分子和原子,导致发光,人们便见到了极光的图像显示。在电视显像管中,是一对电极和一个电磁铁作用于电子束,产生并形成一种活动的图像。在极光发生时,极光的显示和运动则是由于粒子束受到磁层中电场和磁场变化的调制造成的。

极光不仅是个光学现象,而且是个无线电现象,可以用雷达进行探测研究,它还会辐射出某些无线电波。有人还说,极光能发出各种各样的声音。极光不仅是科学研究的重要课题,它还直接影响到无线电通信,长电缆通信,以及长的管道和电力传送线等许多实用工程项目。极光还可以影响到气候,影响生物学过程。当然,极光也还有许许多多没有解开的谜。
极光被视为自然界中最漂亮的奇观之一。如果我们乘着宇宙飞船,越过地球的南北极上空,从遥远的太空向地球望去,会见到围绕地球磁极存在一个闪闪发亮的光环,这个环就叫做极光卵。由于它们向太阳的一边有点被压扁,而背太阳的一边却稍稍被拉伸,因而呈现出卵一样的形状。极光卵处在连续不断的变化之中,时明时暗,时而向赤道方向伸展,时而又向极点方向收缩。处在午夜部分的光环显得最宽最明亮。长期观测统计结果表明,极光最经常出现的地方是在南北磁纬度67度附近的两个环带状区域内,分别称作南极光区和北极光区。在极光区内差不多每天都会发生极光活动。在极光卵所包围的内部区域,通常叫做极盖区,在该区域内,极光出现的机会反而要比纬度较低的极光区来得少。在中低纬地区,尤其是近赤道区域,很少出现极光,但并不是说压根儿观测不到极光。1958年2月10日夜间的一次特大极光,在热带都能见到,而且显示出鲜艳的红色。这类极光往往与特大的太阳耀斑暴发和强烈的地磁暴有关。

在寒冷的极区,人们举目瞭望夜空,常常见到五光十色,千姿百态,各种各样形状的极光。毫不夸大地说,在世界上简直找不出两个一模一样的极光形体来,从科学研究的角度,人们将极光按其形态特征分成五种:一是底边整齐微微弯曲的圆弧状的极光孤;二是有弯扭折皱的飘带状的极光带;三是如云朵一般的片朵状的极光片;四是面纱一样均匀的帐幔状的极光幔;五是沿磁力线方向的射线状的极光芒。

极光形体的亮度变化也是很大的,从刚刚能看得见的银河星云般的亮度,一直亮到满月时的月亮亮度。在强极光出现时,地面上物体的轮廓都能被照见,甚至会照出物体的影子来。最为动人的当然是极光运动所造成的瞬息万变的奇妙景象。我们形容事物变得快时常说:“眼睛一眨,老母鸡变鸭。”极光可真是这样,翻手为云,覆手为雨,变化莫测,而这一切又往往发生在几秒钟或数分钟之内。极光的运动变化,是自然界这个魔术大师,以天空为舞台上演的一出光的活剧,上下纵横成百上千公里,甚至还存在近万公里长的极光带。这种宏伟壮观的自然景象,好像沾了一点仙气似的,颇具神秘色彩。令人叹为观止的则是极光的色彩,早已不能用五颜六色去描绘。说到底,其本色不外乎是红、绿、紫、蓝、白、黄,可是大自然这一超级画家用出神入化的手法,将深浅浓淡、隐显明暗一搭配、一组合,好家伙,一下子变成了万花筒啦。

posted @ 2008-08-19 08:39 qiyadeng 阅读(271) | 评论 (0)编辑 收藏

看清楚了,这可是154公斤。

这可是我们国家老鼠的强项

“刘翔”

posted @ 2008-08-06 18:08 qiyadeng 阅读(335) | 评论 (1)编辑 收藏

 

每个Java程序员都要处理异常,异常处理在应用程序中起着重要的作用。在Java世界中,处理异常看上去不是那么简单,不仅仅是在异常发生的地方,优雅的报告异常。

使用ThreadGroup处理异常

ThreadGroup类中在这个时候大部分方法已经作废了,但是该类还是很有用的。ThreadGroup类有一个方法uncaughtException(Thread,Throwable),意思是:当线程组中的线程因为异常而终止时,Java虚拟机调用该方法。这样你可以考虑继承ThreadGroup类来处理你应用中没有捕获的异常。

public class AppSpecificThreadGroup extends ThreadGroup {

public void uncaughtException(Thread, Throwable) {

// app specific error handling here

// ex: if fatal, release resources

// show user dialog

}

}

这样在你的应用启动的时候,把你的线程加入到线程组(Thread group)中。

public class ApplicationMain {
  public static void main(String[] args) {
    Runnable r = new ApplicationStarter(args);
    ThreadGroup g = new AppSpecificThreadGroup();
    Thread t = new Thread(g, r);
    t.start();
  }
  
  private static void doStart(String[] args) {
    // start application here...
  }
  
  private static class ApplicationStarter {
    private String[] args;
    ApplicationStarter(String[] args) {
      this.args = args;
    }
    
    public void run() {
      doStart(args);
    }
  }
}

使用Java5的Thread.UncaughtExceptionHandler

当认识到ThreadGroup.uncaughtException(Thread,Throwable)方法的巨大作用时,Sun团队在Java5版本站中增强了未捕获的异常处理的功能,引入了Thread.UncaughtExceptionHandler接口,另外这个接口引入了两个新的”Check points”用于处理异常。Thread类有两个属性-uncaughtExceptionHandler和defaultUncaughtExceptionHandler,它们有相应的get/set方法。但是这两个方法是不同的。让我们看看处理异常的过程。

n 使用uncaughtExceptionHandler为当前线程处理异常。

n 如果uncaughtExceptionHandler为空(null),使用线程组(如果用户没有显示设置,线程组是uncaughtExceptionHandler的默认实现)。

n 如果线程组是默认的实现,但是不是根线程组,将把错误处理委派给父线程组。

n 如果线程组是默认的实现,并且是根线程组,将使用线程(Thread)类上设置的defaultUncaughtExceptionHandler方法。

n 如果在线程类没有设置defaultUncaughtExceptionHandler,将调用Java5之前的ThreadGroup类中的未捕获异常方法。

实现Thread.UncaughtExceptionHandler接口看起来也像上面实现ThreadGroup接口。

public class AppSpecificExceptionHandler implements Thread.UncaughtExceptionHandler {
  
 public void uncaughtException(Thread, Throwable) {
   // app specific error handling here
   // ex: if fatal, release resources
   //     show user dialog
 }
}

在应用程序中插入如下:

public class ApplicationMain {
 public static void main(String[] args) {
  Thread.setDefaultUncaughtExceptionHandler(new AppSpecificExceptionHandler());
 }
}

Swing异常处理实现

许多人没有注意到现有的JOptionPanel类,该类中有许多的优美的弹出对话框的静态方法(showOptionDialog,showConfirmDialog,showInputDialog,和showMessageDialog),这些方法接受的参数不仅仅是字符串。这些静态方法(也包括JOptionPanel构造函数)都是接受一个Object作为参数的的。下面是一个实现该类的核心代码:

public class ErrorDialog {

public ErrorDialog() {

super();

}

public static void showQuickErrorDialog(JFrame parent, Exception e) {

final JTextArea textArea = new JTextArea();

textArea.setFont(new Font("Sans-Serif", Font.PLAIN, 10));

textArea.setEditable(false);

StringWriter writer = new StringWriter();

e.printStackTrace(new PrintWriter(writer));

textArea.setText(writer.toString());

JScrollPane scrollPane = new JScrollPane(textArea);

scrollPane.setPreferredSize(new Dimension(350, 150));

JOptionPane.showMessageDialog(parent, scrollPane,

"An Error Has Occurred", JOptionPane.ERROR_MESSAGE);

}

}

在程序中的一个例图如下:

clip_image002

posted @ 2008-07-29 11:18 qiyadeng 阅读(1477) | 评论 (0)编辑 收藏

仅列出标题
共9页: 上一页 1 2 3 4 5 6 7 8 9 下一页