利用类对象计算日期

在利用Java语言进行信息系统开发中,经常需要对日期进行计算和转换,比如,设置了某活动的开始日期和结束日期,系统需要判断当前是否是该活动时间,在Java开发的信息系统中,通常日期以字符串形式“yyyy-MM-dd hh:mm:ss”保存到数据库中,在进行转换中,通常需要将字符串表示的日期转换为Date对象,Java API提供了一个工具SimpleDateFormat对象能将一个满足“yyyy-MM-dd hh:mm:ss”形式的字符串转换成一个Date对象。在日期转换中,经常也利用到时间戳,什么是时间戳(timestamp)?时间戳(timestamp)是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。通过日期对象的getTime()将获得该日期的当前时间戳的毫米数。

将日期字符串转换为Date对象的参考代码如下:

try {

String dateString = "2009-08-02 13:43:00";

DateFormat df = SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date date = df.parse(dateString);

} catch(Exception ex) {

}

给你的问题是,如何给出某活动的开始日期和结束日期,已经当前日期的时间戳,需要你编程判定当前日期所处的位置.

样例输入:

输入的第一行为已个正整数N,表示需要你计算活动次数,接下来的N行,每行的第一个数为一个10位正整数,表示当前日期的时间戳秒数,接下来是两个字符串,表示活动开始日期和结束日期。字符串满足日期“yyyy-MM-dd hh:mm:ss”格式。
样例输出:
    如果当前日期在活动开始之前,就输出“Before",如果在活动之中输出"NOW", 如果在活动之后,输出"After".
测试输入数据:
2
1389339888 "2013-10-11 12:12:12" "2013-10-12 12:12:12"
1389339888 "2014-01-09 12:12:12" "2014-01-12 12:12:12"
测试输出数据:
After
NOW

实训分析:本问题是多测试用例问题,用例数可知,解决一个用例的类型为:

类型名称:DateQuestion

成员变量:

private long tms;

private Data t_begin,t_end;

可用不同的构造方法完成输入的行提取tms和t_begin,t_end。

构造方法1:

public DateQuestion (String
s){

//完成输入的行提取tms和t_begin,t_end;

}

构造方法2:

public DateQuestion (long
t,String s){

//完成输入的行提取tms和t_begin,t_end;

}

构造方法3:

public DateQuestion (long
t,String s1,String s2){

//完成输入的行提取tms和t_begin,t_end;

}

public String getResult(){

//从日期中提取毫秒数(date.getTime()方法),再与tms的大小进行比较,算法比较简单

}

提示:本实训的难度在于从输入行中提取日期数据,方法有多种,建议先读取一个long数据,再读一行,从行字符串中使用”将字符串分成多组,分组方法使用Scanner对象.

方法一:

构造方法public DateQuestion (String s){ }

import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
class DateQuestion {
private long tms;// 时间戳秒数
private Date t_begin,t_end; // 开始日期和结束日期
public DateQuestion(String s) {
// 完成输入的行提取tms和t_begin,t_end; }
tms = Long.parseLong(s.substring(0, 10));
SimpleDateFormat dat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try {
t_begin = dat.parse(s.substring(12, 31));
t_end = dat.parse(s.substring(34, s.length() - 1));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getResult() {
// 从日期中提取毫秒数(date.getTime()方法),再与tms的大小进行比较,算法比较简单
Long time_me = tms * 1000;
long time_begin = t_begin.getTime();
long time_end = t_end.getTime();
String result;
if (time_me < time_begin)
result = "Before";
else if (time_me > time_end)
result = "After";
else
result = "NOW";
return result;
}
} public class DateTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String s = in.nextLine();
for (int i = 0; i < n; i++) {
s = in.nextLine();
DateQuestion date = new DateQuestion(s);
System.out.println(date.getResult());
}
}
}

方法二:构造方法public DateQuestion (long t ,String s){ }

class DateQuestion {
private long tms;// 时间戳秒数
private Date t_begin,Date t_end; // 开始日期和结束日期
public DateQuestion(long t,String s) {
// 完成输入的行提取tms和t_begin,t_end;
String ss[]=s.split("\"");
tms = t;
try {
SimpleDateFormat dat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
t_begin = dat.parse(ss[1]);
t_end = dat.parse(ss[3]);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getResult() {
// 从日期中提取毫秒数(date.getTime()方法),再与tms的大小进行比较,算法比较简单
Long time_me = tms * 1000;
long time_begin = t_begin.getTime();
long time_end = t_end.getTime();
String result;
if (time_me < time_begin)
result = "Before";
else if (time_me > time_end)
result = "After";
else
result = "NOW";
return result;
}
}
public class DateTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String s = in.nextLine();
for (int i = 0; i < n; i++) {
long t=in.nextLong();
s = in.nextLine();
DateQuestion date = new DateQuestion(t,s);
System.out.println(date.getResult());
}
}
}

方法三:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
public class p12 {
public static void main(String[] args) throws Exception {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String s = in.nextLine();
SimpleDateFormat dat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
for (int k = 0; k < n; k++)
{ String ss[] = new String[3];
s=in.nextLine();
ss[0] = s.substring(0, 10);
ss[1] = s.substring(12, 31);
ss[2] = s.substring(34, s.length() -1);
Long time_me = Long.parseLong(ss[0]) * 1000;
long time_begin = dat.parse(ss[1]).getTime();
long time_end = dat.parse(ss[2]).getTime();
if (time_me < time_begin)
{ System.out.println("Before"); }
else if (time_me > time_end)
{ System.out.println("After"); }
else { System.out.println("NOW");
}
}
}
}

Java实现日期时间对象的使用的更多相关文章

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

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

  2. Java 8 日期时间API

    Java 8一个新增的重要特性就是引入了新的时间和日期API,它们被包含在java.time包中.借助新的时间和日期API可以以更简洁的方法处理时间和日期; 在介绍本篇文章内容之前,我们先来讨论Jav ...

  3. Java8 新特性(三) - 日期时间对象以及一些其他特性

    日期时间对象 关于日期时间的操作可以分为两种: 转换:与字符串的互相转换,与时间戳的互相转换 计算:计算两个时间点之间的间隔.时间点与时间段的计算(计算下周N.下个月D日.去年M月D日等等) Java ...

  4. Java 8 日期时间 API

    转自:https://www.runoob.com/java/java8-datetime-api.html Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与 ...

  5. Java 8 新特性-菜鸟教程 (8) -Java 8 日期时间 API

    Java 8 日期时间 API Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理. 在旧版的 Java 中,日期时间 API 存在诸多问题,其中有: ...

  6. 08JavaScript数学与日期时间对象

    JavaScript数学与日期时间对象 5.1.3数学(Math)对象 <script> //欧拉常量,自然对数的底(约等于2.718); document.write(Math.E+&q ...

  7. Java 8——日期时间工具库(java.time)

    一.前言 在介绍Java SE 8中新的日期时间库前,先了解下Java 8之前的日期时间工具的诟病. 在Java SE 8前,日期时间工具库在java.util包中,包括: java.util.Dat ...

  8. Java 之 日期时间类

    一.Date类 1.概述 java.util.Date 类 表示特定的瞬间,精确到毫秒. 2.构造方法 public Date():分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒) p ...

  9. [转载]Java 8 日期&时间 API

    Java 8 日期和时间 声明 本文转自http://www.journaldev.com/2800/java-8-date-localdate-localdatetime-instant,以mark ...

随机推荐

  1. Frequent values(poj 3368)

    题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数. 代码: /* rmq算法 当询问到x,y时,设在x之后并且与a[x]相同的最后一个数编号为t,那么x到t之 ...

  2. 自己打断点走的struts流程&拦截器工作原理

    ①. 请求发送给 StrutsPrepareAndExecuteFilter ②. StrutsPrepareAndExecuteFilter 判定该请求是否是一个 Struts2 请 求(Actio ...

  3. Linux下C编程入门(7)

    Linux下项目同步工具介绍git和github 一.远程仓库工具github 1. 一.本地操作工具git 1.

  4. CI设置表单验证规则

    CodeIgniter 允许你为单个表单域创建多个验证规则,按顺序层叠在一起, 你也可以同时对表单域的数据进行预处理.要设置验证规则, 可以使用 set_rules() 方法: $this->f ...

  5. [bzoj2527][Poi2011]Meteors_整体二分_树状数组

    Meteors bzoj-2527 Poi-2011 题目大意:题目链接. 注释:略. 想法: 首先答案可以离线,且具有单调性. 这里的单调性就是随着时间的推移,每个国家收集的陨石数增加. 不难想到整 ...

  6. 2017-10-01-afternoon

    T1 一道图论好题(graph) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带 ...

  7. Javascript基本概念梳理

    javascript里的数据类型: 原始类型:数字,字符串.布尔值.(原始值:null,undefined) 对象类型:键值对,数组,function,全局对象(MATH,JSON) 保留字: abs ...

  8. POJ 3281 Dining(最大流)

    POJ 3281 Dining id=3281" target="_blank" style="">题目链接 题意:n个牛.每一个牛有一些喜欢的 ...

  9. 后台发送http请求通用方法,包括get和post

    package com.examsafety.service.sh; import java.io.BufferedReader; import java.io.IOException; import ...

  10. 【bzoj4245】[ONTAK2015]OR-XOR

    利用前缀和选m个区间等价于选m个数 从最高位开始找,如果这一位至少有m个0,则可以为0,该位为1的后面就不可以选了. 还要注意,最后一个数如果该位为1,那么这一位必须为1,然后要从62开始枚举,而不是 ...