Json下日期格式控制 与 Java 日期计算

创建一个日期对象

使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子。 这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间。



import java.util.Date; 
public class DateExample1 {    public static void main(String[] args)   {    
// Get the system date/time     Date date = new Date();     System.out.println(date.getTime());     } }
 

今天是星期一,2005年8月8日,上午8:43,上面的例子在系统输出设备上显示的结果是1123461832312。

日期数据的定制格式 

使用类java.text.SimpleDateFormat和它的抽象基类 java.text.DateFormat 完成日期数据的格式定制,比方今天星期一-八月-08-2005。
下面的例子展示了如何完成这个工作: 


import java.text.SimpleDateFormat; import java.util.Date; 
public class DateExample2 { 
  public static void main(String[] args)  {  SimpleDateFormat bartDateFormat = new SimpleDateFormat  				
("EEEE-MMMM-dd-yyyy");   Date date = new Date();   System.out.println(bartDateFormat.format(date));   } }
 


只要通过向SimpleDateFormat 的构造函数传递格式字符串"EEE-MMMM-dd-yyyy",就能够指明自己想要的格式。运行结果就是:星期一-八月-08-2005 了。
传递"EE-MM-dd-yy"会显示 星期一-08-08-05 。

将文本数据解析成日期对象 

假设一个文本字符串包含了一个格式化了的日期对象,而需要解析这个字符串并从文本日期数据创建一个日期对象。下面的例子,
将解析文本字符串"8-8-2005"并创建一个值为1123430400000 的日期对象。 

例子程序: 

import java.text.SimpleDateFormat; import java.util.Date; 
public class DateExample3{   
public static void main(String[] args)  {     
// Create a date formatter that can parse dates of the form MM-dd-yyyy.     
SimpleDateFormat bartDateFormat = new SimpleDateFormat("MM-dd-yyyy");         
// Create a string containing a text date to be parsed.     String dateStringToParse = "8-8-2005";     
try {       // Parse the text version of the date.       
//We have to perform the parse method in a       
//try-catch construct in case dateStringToParse       
//does not contain a date in the format we are expecting.       
Date date = bartDateFormat.parse(dateStringToParse);       
// Now send the parsed date as a long value       
// to the system output.       System.out.println(date.getTime());     }     catch (Exception ex){       
System.out.println(ex.getMessage());       }  } }
 


使用标准的日期格式化过程 

可以生成和解析定制的日期格式后,现在来看一看如何使用内建的格式化过程。使用方法DateFormat.getDateTimeInstance()可以得到用几种不同的方法
获得标准的日期格式化过程。在下面的例子中,我们获取了四个内建的日期格式化过程。它们包括一个短的,中等的,长的,和完整的日期格式。 


import java.text.DateFormat; import java.util.Date; 

public class DateExample4{   public static void main(String[] args)  {    Date date = new Date();     
DateFormat shortDateFormat = DateFormat.getDateTimeInstance               		
(DateFormat.SHORT,DateFormat.SHORT);     DateFormat mediumDateFormat = DateFormat.getDateTimeInstance               		
(DateFormat.MEDIUM,DateFormat.MEDIUM);     DateFormat longDateFormat = DateFormat.getDateTimeInstance               		
(DateFormat.LONG,DateFormat.LONG);     DateFormat fullDateFormat = DateFormat.getDateTimeInstance              		 
DateFormat.FULL,DateFormat.FULL); 

    System.out.println(shortDateFormat.format(date));     
System.out.println(mediumDateFormat.format(date));     
System.out.println(longDateFormat.format(date));     S
ystem.out.println(fullDateFormat.format(date));   } }
 


注意我们在对 getDateTimeInstance的每次调用中都传递了两个值。 第一个参数是日期风格, 而第二个参数是时间风格。 它们都是基本数据类型int(整型)。
考虑到可读性,这里使用了DateFormat 类提供的常量: SHORT, MEDIUM, LONG, 和 FULL。 

运行例子程序, 它将向标准输出设备输出下面的内容: 


05-8-8 上午9:17 
2005-8-8 9:17:42 
2005年8月8日 上午09时17分42秒
2005年8月8日 09时17分42秒 GMT+08:00
 

(完成 程序测试结果基于JDK1.2.2)


-----------------------------------------------------------------------------------------------------------------------------------

第一个要求很简单的,就是先定制一个年月日字符型格式的日期,然后将它解析成一个日期对象;再设置一个只显示星期几的日期的格式,将上面的日期对象格式输出就行了。

第二个要求也不难,你是想对数据库中的数据操作,我这里就用数组给你模拟一下吧。我定义了两个int变量SHANGBAN,XIUXI,对应你的两个字段值1和0,
然后我对8月的数据进行了操作(我是假设双休日休息,对应今年的这个月),根据输入的年月日字符,用substing提取了各个字段,然后进行相应查找就行了。
你可以用各个字段到数据库中相应的那一天查询对应的值就ok了。

下面是我的程序:

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.lang.String;
import java.lang.Integer;
public class DateExample{   
  public static void main(String[] args){ 
   int SHANGBAN = 1; //上班
   int XIUXI = 0;  //休息
   int[] AugDay = { //八月份数据
         SHANGBAN,SHANGBAN,SHANGBAN,SHANGBAN,SHANGBAN,XIUXI,XIUXI,
         SHANGBAN,SHANGBAN,SHANGBAN,SHANGBAN,SHANGBAN,XIUXI,XIUXI,
         SHANGBAN,SHANGBAN,SHANGBAN,SHANGBAN,SHANGBAN,XIUXI,XIUXI,
         SHANGBAN,SHANGBAN,SHANGBAN,SHANGBAN,SHANGBAN,XIUXI,XIUXI,
         SHANGBAN,SHANGBAN,SHANGBAN
    }; 
    // Create a date formatter that can parse dates of the form yyyy-MM-dd.     
    SimpleDateFormat bartDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");         
    // Create a string containing a text date to be parsed.     
    String dateStringToParse = "2005-8-10";   //可以改成接受输入  
    try { 
     Date date = bartDateFormat1.parse(dateStringToParse); 
     SimpleDateFormat bartDateFormat2 = new SimpleDateFormat("EEEE"); 
     System.out.println(dateStringToParse + " " +bartDateFormat2.format(date));
     
     int year = Integer.parseInt(dateStringToParse.substring(0,4));
      int month = Integer.parseInt(dateStringToParse.substring(5,6));
      int day = Integer.parseInt(dateStringToParse.substring(7,9));
     
      if(month == 8){
       //假如输入的是8月份的话(这里只是演示,指的是今年8月,你可以按你的需要修改)
       if(AugDay[day-1] == SHANGBAN){
        System.out.println("今天上班");
       }
       else{
        System.out.println("今天休息");
       }
      }
   }
   catch (Exception ex){       
    System.out.println(ex.getMessage());  
    } 
  }
}

输入时间是2005-8-10,只用了八月的数组里的值来显示大体的意思,你完全可以修改满足你的需要。最后显示结果为:

2005-8-10 星期三
今天上班

好了,应该很清楚了吧,加油,也感谢你的支持!

I LOVE JAVA!
 

 

 

 

 

jstl fmt:formatdate

<%@ page language="java" contentType="text/html; charset=gb18030"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
     <head>
       <title>My JSP 'fmt.jsp' starting page</title>
     </head>
 
     <body>
      <c:set var="salary" value="3540.2301"/>
      <c:set var="total" value="56225.2301"/>
      <fmt:setLocale value="en_US"/>
      currency:<fmt:formatNumber value="${salary}" type="currency" currencyCode="USD"/><br>
      percent:<fmt:formatNumber value="${salary/total}" type="percent" maxFractionDigits="4"/><br>
      <hr>
      <jsp:useBean id="now" class="java.util.Date"></jsp:useBean>
      <fmt:setLocale value="zh_CN"/>
      full--><fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full"/><br>
      long--><fmt:formatDate value="${now}" type="both" dateStyle="long" timeStyle="long"/><br>
      medium--><fmt:formatDate value="${now}" type="both" dateStyle="medium" timeStyle="medium"/><br>
      default--><fmt:formatDate value="${now}" type="both" dateStyle="default" timeStyle="default"/><br>
      short--><fmt:formatDate value="${now}" type="both" dateStyle="short" timeStyle="short"/><br>
     </body>
</html>

 
 
今天是:<fmt:formatDate value="${now}" pattern="G yyyy年MM月dd日 E"/><br>
现在是:<fmt:formatDate value="${now}" pattern="a HH:mm:ss.S z"/>
结果:
今天是:公元 2007年10月19日 星期五
现在是:下午 20:04:11.484 CST

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>

<fmt:parseDate value="${param.date}" var="date" pattern="yyyy/MM/dd:HH:mm:ss>
<fmt:parseDate value="${param.isoDate}" var="isoDate" pattern="yyyyMMdd'T'HHmmss">

The input parameters must match the patterns, or the JSP will thrown an exception. This page does no error handling.

Input parameters:
Date: 2004/04/01:13:30:00 Java format: Thu Apr 01 13:30:00 CST 2004
isoDate: 20040531T235959 Java format: Mon May 31 23:59:59 CDT 2004

Dates
Tag Output
Attribute: value; required. Tag has no body.
<fmt:formatDate value="${date}" type="both"/>

2004-4-1 13:30:00
<fmt:formatDate value="${isoDate}" type="both"/>

2004-5-31 23:59:59
Attribute: type; optional. Indicates what to print: date, time, or both.
<fmt:formatDate value="${date}" type="date"/>

2004-4-1
<fmt:formatDate value="${isoDate}" type="time"/>

23:59:59
Attribute: dateStyle; optional. Varies the date format.
<fmt:formatDate value="${isoDate}" type="date" dateStyle="default"/>

2004-5-31
<fmt:formatDate value="${isoDate}" type="date" dateStyle="short"/>

04-5-31
<fmt:formatDate value="${isoDate}" type="date" dateStyle="medium"/>

2004-5-31
<fmt:formatDate value="${isoDate}" type="date" dateStyle="long"/>

2004年5月31日
<fmt:formatDate value="${isoDate}" type="date" dateStyle="full"/>

2004年5月31日 星期一
Attribute: timeStyle; optional. Varies the time format.
<fmt:formatDate value="${isoDate}" type="time" timeStyle="default"/>

23:59:59
<fmt:formatDate value="${isoDate}" type="time" timeStyle="short"/>

下午11:59
<fmt:formatDate value="${isoDate}" type="time" timeStyle="medium"/>

23:59:59
<fmt:formatDate value="${isoDate}" type="time" timeStyle="long"/>

下午11时59分59秒
<fmt:formatDate value="${isoDate}" type="time" timeStyle="full"/>

下午11时59分59秒 CDT
Attribute: pattern; optional. Inidcates date/time custom patterns.
<fmt:formatDate value="${date}" type="both" pattern="EEEE, MMMM d, yyyy HH:mm:ss Z"/>

星期四, 四月 1, 2004 13:30:00 -0600
<fmt:formatDate value="${isoDate}" type="both" pattern="d MMM yy, h:m:s a zzzz/>

31 五月 04, 11:59:59 下午 中央夏令时 

==========================================================================

 Java日期计算 收藏

Java中提供了丰富的日期表示方式。其中包括Date、Timestamp、Calendar、GregorianCalendar类。GregorianCalendar类中提供了用于计算日期的add()方法,
可以很方便地计算若干年、月、日后的日期。

给个例子看看:

package testjava;

import java.sql.Timestamp;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.GregorianCalendar;

public class DateTest {

public static void main(String[] args) {

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

DateTest test = new DateTest();

//Date

Date currentDate = new Date();

System.out.println("当前日期是:" + df.format(currentDate));

System.out.println("一周后的日期是:" + df.format(test.nextWeek(currentDate)));

System.out.println("一月后的日期是:" + df.format(test.nextMonth(currentDate)));

System.out.println("一年后的日期是:" + df.format(test.nextYear(currentDate)));

//Timestamp

Timestamp currentTime = new Timestamp(System.currentTimeMillis());

System.out.println("当前日期是:" + df.format(currentTime));

System.out.println("一周后的日期是:" + df.format(test.nextWeek(currentTime)));

System.out.println("一月后的日期是:" + df.format(test.nextMonth(currentTime)));

System.out.println("一年后的日期是:" + df.format(test.nextYear(currentTime)));

//另一种计算方式,这种方式计算月和年的日期比较困难

Timestamp nextTime = new Timestamp(currentTime.getTime() + 7 * 24 * 60 * 60 * 1000);

System.out.println("当前日期是:" + df.format(currentTime));

System.out.println("一周后的日期是:" + df.format(nextTime));

}

//获取下一周的日期

public Date nextWeek(Date currentDate) {

GregorianCalendar cal = new GregorianCalendar();

cal.setTime(currentDate);

cal.add(GregorianCalendar.DATE, 7);//在日期上加7天

return cal.getTime();

}

//获取本周日的日期

public Date getSunday(Date monday) {

GregorianCalendar cal = new GregorianCalendar();

cal.setTime(monday);

cal.add(GregorianCalendar.DATE, 6);//在日期上加6天

return cal.getTime();

}

//获取下一月的日期

public Date nextMonth(Date currentDate) {

GregorianCalendar cal = new GregorianCalendar();

cal.setTime(currentDate);

cal.add(GregorianCalendar.MONTH, 1);//在月份上加1

return cal.getTime();

}

//获取下一年的日期

public Date nextYear(Date currentDate) {

GregorianCalendar cal = new GregorianCalendar();

cal.setTime(currentDate);

cal.add(GregorianCalendar.YEAR, 1);//在年上加1

return cal.getTime();

}

}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值