??xml version="1.0" encoding="utf-8" standalone="yes"?>
set @objectId=object_id('proc_insert')
if @objectId is not null
begin
drop proc proc_insert
end
go
create proc proc_insert (@tablename varchar(256))
as
begin
set nocount on
declare @sqlstr varchar(4000)
declare @sqlstr1 varchar(4000)
declare @sqlstr2 varchar(4000)
select @sqlstr='select ''insert '+@tablename
select @sqlstr1=''
select @sqlstr2='('
select @sqlstr1='values (''+'
select @sqlstr1=@sqlstr1+col+'+'',''+' ,@sqlstr2=@sqlstr2+name +',' from (select case
when a.xtype =173 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'
when a.xtype =104 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(1),'+a.name +')'+' end'
when a.xtype =175 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
when a.xtype =61 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'
when a.xtype =106 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'
when a.xtype =62 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end'
when a.xtype =56 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(11),'+a.name +')'+' end'
when a.xtype =60 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end'
when a.xtype =239 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
when a.xtype =108 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'
when a.xtype =231 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
when a.xtype =59 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end'
when a.xtype =58 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'
when a.xtype =52 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(12),'+a.name +')'+' end'
when a.xtype =122 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end'
when a.xtype =48 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(6),'+a.name +')'+' end'
when a.xtype =165 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'
when a.xtype =167 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
else '''NULL'''
end as col,a.colid,a.name
from syscolumns a where a.id = object_id(@tablename) and a.xtype <>189 and a.xtype <>34 and a.xtype <>35 and a.xtype <>36
)t order by colid
select @sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+') '+left(@sqlstr1,len(@sqlstr1)-3)+')'' from '+@tablename
print @sqlstr
exec( @sqlstr)
set nocount off
end
go
执行ҎQ将tablename替换为相应的数据表名Q:
exec proc_insert 'tablename'
]]>
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.Vector;
/**
* 与日期、时间相关的一些常用工h?
* <p>
* 日期(旉)的常用格?formater)主要? <br>
* yyyy-MM-dd HH:mm:ss <br>
*
* @author stephen
* @version 1.0.0
*/
public final class DateTool {
/**
* Ҏ?旉)中的日进行加减计? <br>
* 例子: <br>
* 如果Datecd的d?2005q??0?那么 <br>
* calculateByDate(d,-10)的gؓ2005q??0?<br>
* 而calculateByDate(d,+10)的gؓ2005q??0?<br>
*
* @param d
* 日期(旉).
* @param amount
* 加减计算的幅?+n=加n?-n=减n?
* @return 计算后的日期(旉).
*/
public static Date calculateByDate(Date d, int amount) {
return calculate(d, GregorianCalendar.DATE, amount);
}
public static Date calculateByMinute(Date d, int amount) {
return calculate(d, GregorianCalendar.MINUTE, amount);
}
public static Date calculateByYear(Date d, int amount) {
return calculate(d, GregorianCalendar.YEAR, amount);
}
/**
* Ҏ?旉)中由field参数指定的日期成员进行加减计? <br>
* 例子: <br>
* 如果Datecd的d?2005q??0?那么 <br>
* calculate(d,GregorianCalendar.YEAR,-10)的gؓ1995q??0?<br>
* 而calculate(d,GregorianCalendar.YEAR,+10)的gؓ2015q??0?<br>
*
* @param d
* 日期(旉).
* @param field
* 日期成员. <br>
* 日期成员主要? <br>
* q?GregorianCalendar.YEAR <br>
* ?GregorianCalendar.MONTH <br>
* ?GregorianCalendar.DATE <br>
* ?GregorianCalendar.HOUR <br>
* ?GregorianCalendar.MINUTE <br>
* U?GregorianCalendar.SECOND <br>
* 毫秒:GregorianCalendar.MILLISECOND <br>
* @param amount
* 加减计算的幅?+n=加n个由参数field指定的日期成员?-n=减n个由参数field代表的日期成员?
* @return 计算后的日期(旉).
*/
private static Date calculate(Date d, int field, int amount) {
if (d == null)
return null;
GregorianCalendar g = new GregorianCalendar();
g.setGregorianChange(d);
g.add(field, amount);
return g.getTime();
}
/**
* 日期(旉)转化为字W串.
*
* @param formater
* 日期或时间的格式.
* @param aDate
* java.util.Datecȝ实例.
* @return 日期转化后的字符?
*/
public static String date2String(String formater, Date aDate) {
if (formater == null || "".equals(formater))
return null;
if (aDate == null)
return null;
return (new SimpleDateFormat(formater)).format(aDate);
}
/**
* 当前日期(旉)转化为字W串.
*
* @param formater
* 日期或时间的格式.
* @return 日期转化后的字符?
*/
public static String date2String(String formater) {
return date2String(formater, new Date());
}
/**
* 获取当前日期对应的星期数.
* <br>1=星期?2=星期一,3=星期?4=星期?5=星期?6=星期?7=星期?nbsp;
* @return 当前日期对应的星期数
*/
public static int dayOfWeek() {
GregorianCalendar g = new GregorianCalendar();
int ret = g.get(java.util.Calendar.DAY_OF_WEEK);
g = null;
return ret;
}
/**
* 获取所有的时区~号. <br>
* 排序规则:按照ASCII字符的正序进行排? <br>
* 排序时候忽略字W大写.
*
* @return 所有的时区~号(时区~号已经按照字符[忽略大小写]排序).
*/
public static String[] fecthAllTimeZoneIds() {
Vector v = new Vector();
String[] ids = TimeZone.getAvailableIDs();
for (int i = 0; i < ids.length; i++) {
v.add(ids[i]);
}
java.util.Collections.sort(v, String.CASE_INSENSITIVE_ORDER);
v.copyInto(ids);
v = null;
return ids;
}
/**
* 日期时间字W串Ҏ转换为指定时区的日期旉.
*
* @param srcFormater
* 待{化的日期旉的格?
* @param srcDateTime
* 待{化的日期旉.
* @param dstFormater
* 目标的日期时间的格式.
* @param dstTimeZoneId
* 目标的时区编?
*
* @return 转化后的日期旉.
*/
public static String string2Timezone(String srcFormater,
String srcDateTime, String dstFormater, String dstTimeZoneId) {
if (srcFormater == null || "".equals(srcFormater))
return null;
if (srcDateTime == null || "".equals(srcDateTime))
return null;
if (dstFormater == null || "".equals(dstFormater))
return null;
if (dstTimeZoneId == null || "".equals(dstTimeZoneId))
return null;
SimpleDateFormat sdf = new SimpleDateFormat(srcFormater);
try {
int diffTime = getDiffTimeZoneRawOffset(dstTimeZoneId);
Date d = sdf.parse(srcDateTime);
long nowTime = d.getTime();
long newNowTime = nowTime - diffTime;
d = new Date(newNowTime);
return date2String(dstFormater, d);
} catch (ParseException e) {
//Log.output(e.toString(), Log);
return null;
} finally {
sdf = null;
}
}
/**
* 获取pȝ当前默认时区与UTC的时间差.(单位:毫秒)
*
* @return pȝ当前默认时区与UTC的时间差.(单位:毫秒)
*/
private static int getDefaultTimeZoneRawOffset() {
return TimeZone.getDefault().getRawOffset();
}
/**
* 获取指定时区与UTC的时间差.(单位:毫秒)
*
* @param timeZoneId
* 时区Id
* @return 指定时区与UTC的时间差.(单位:毫秒)
*/
private static int getTimeZoneRawOffset(String timeZoneId) {
return TimeZone.getTimeZone(timeZoneId).getRawOffset();
}
/**
* 获取pȝ当前默认时区与指定时区的旉?(单位:毫秒)
*
* @param timeZoneId
* 时区Id
* @return pȝ当前默认时区与指定时区的旉?(单位:毫秒)
*/
private static int getDiffTimeZoneRawOffset(String timeZoneId) {
return TimeZone.getDefault().getRawOffset()
- TimeZone.getTimeZone(timeZoneId).getRawOffset();
}
/**
* 日期时间字W串Ҏ转换为指定时区的日期旉.
*
* @param srcDateTime
* 待{化的日期旉.
* @param dstTimeZoneId
* 目标的时区编?
*
* @return 转化后的日期旉.
* @see #string2Timezone(String, String, String, String)
*/
public static String string2TimezoneDefault(String srcDateTime,
String dstTimeZoneId) {
return string2Timezone("yyyy-MM-dd HH:mm:ss", srcDateTime,
"yyyy-MM-dd HH:mm:ss", dstTimeZoneId);
}
/**
* 试的mainҎ.
*
* @param argc
*/
public static void main(String[] argc){
String nowDateTime =date2String("yyyy-MM-dd HH:mm:ss");
System.out.println(string2TimezoneDefault(nowDateTime,"UTC"));
// String[] ids = fecthAllTimeZoneIds();
// String nowDateTime =date2String("yyyy-MM-dd HH:mm:ss");
// System.out.println("The time Asia/Shanhai is " + nowDateTime);//E序本地q行所在时Zؓ[Asia/Shanhai]
// //昄世界每个时区当前的实际时?nbsp;
// for(int i=0;i <ids.length;i++){
// System.out.println(" * " + ids[i] + "=" + string2TimezoneDefault(nowDateTime,ids[i]));
// }
// //昄E序q行所在地的时?nbsp;
// System.out.println("TimeZone.getDefault().getID()=" +TimeZone.getDefault().getID());
}
}
最q,手头有不项目,其中有一个类似公文流转的目Q其中有一个模块是d的制定,而在d的类型中有一个@环Q务,是用户输入d的开始日期、结束日期,q需要输入一个周期数Q比如每周的星期几、每月的多少LQ这里面q扯到JAVA日期旉的计,从网上收集了一下,整理下来Q供大家参考^_^
Java 语言的CalendarQGregorianCalendar (日历),Date(日期), 和DateFormat(日期格式)l成了Java标准的一个基本但是非帔R要的部分. 日期是商业逻辑计算一个关键的部分. 所有的开发者都应该能够计算未来的日? 定制日期的显C格? q将文本数据解析成日期对象。学习日? 日期格式, 日期的解析和日期的计?/p>
我们讨Z面的c?
1?nbsp; 具体c?和抽象类相对)java.util.Date
2?nbsp; 抽象cjava.text.DateFormat 和它的一个具体子c?java.text.SimpleDateFormat
3?nbsp; 抽象cjava.util.Calendar 和它的一个具体子c?java.util.GregorianCalendar 具体cd以被实例? 但是抽象cd不能. 你首先必d现抽象类的一个具体子c?
1. java.util.Date及其格式?/strong>
Date cMJava 开发包(JDK) 1.0 开始进? 当时它只包含了几个取得或者设|一个日期数据的各个部分的方? 比如说月, ? 和年. q些Ҏ现在遭到了批评ƈ且已l被转移CCalendarc里M, 我们在本文中进一步讨论它. q种改进旨在更好的处理日期数据的国际化格? p在JDK 1.1中一? Date cd际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从GMT(格林治标准旉)1970q? 1 ?1?0:00:00q一M前或者是之后l历的毫U数.
1.1. 创徏java.util.DateJava
l计?970q??日v的毫U的数量表示日期。也是_例如Q?970q??日,是在1?日后?6Q?00Q?00毫秒。同LQ?969q?2?1日是?970q??日前86Q?00Q?00毫秒。Java的DatecM用longcdU录q些毫秒?因ؓlong是有W号整数Q所以日期可以在1970q??日之前,也可以在q之后。Longcd表示的最大正值和最大负值可以轻杄表示290Q?00Q?00q的旉Q这适合大多Ch的时间要求。让我们看一个用系l的当前日期和时间创Z个日期对象ƈq回一个长整数的简单例? q个旉通常被称为Java 虚拟?JVM)L环境的系l时?
import java.util.Date;
public class DateExample1
{
public static void main(String] args)
{
// Get the system date/time Date date = new Date(); // 打印出具体的q_月,日,时Q分钟,U钟以及时区
System.out.println(date.getTime());
}
}
在星期六, 2001q??9? 下午大约?:50的样? 上面的例子在pȝ输出讑֤上显C的l果?1001803809710. 在这个例子中,值得注意的是我们使用了Date 构造函数创Z个日期对? q个构造函数没有接受Q何参? 而这个构造函数在内部使用了System.currentTimeMillis() Ҏ来从pȝ获取日期.
//1q前日期
java.util.Date myDate=new java.util.Date();
long myTime=(myDate.getTime()/1000)-60*60*24*365;
myDate.setTime(myTime*1000);
String mDate=formatter.format(myDate);//明天日期
myDate=new java.util.Date();
myTime=(myDate.getTime()/1000)+60*60*24;
myDate.setTime(myTime*1000);
mDate=formatter.format(myDate);
//两个旉之间的天?nbsp;
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date= myFormatter.parse("2003-05-1");
java.util.Date mydate= myFormatter.parse("1899-12-30");
long day=(date.getTime()-mydate.getTime())/(24*60*60*1000);
//加半时SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
java.util.Date date1 = format.parse("2002-02-28 23:16:00");
long Time=(date1.getTime()/1000)+60*30;
date1.setTime(Time*1000);String mydate1=formatter.format(date1);
//q月周求日期
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");
java.util.Date date2= formatter2.parse("2003-05 5 星期?);
SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");
String mydate2=formatter3.format(date2);
//求是星期?/p>
mydate= myFormatter.parse("2001-1-1");
SimpleDateFormat formatter4 = new SimpleDateFormat("E");
String mydate3=formatter4.format(mydate);
1.2. Date格式?/strong>
能以一U用h白的格式来显C个日期呢? 在这里类java.text.SimpleDateFormat 和它的抽象基c?java.text.DateFormat。那? 现在我们已经知道了如何获取从1970q??日开始经历的毫秒C. 我们如何才format 派得上用场?
// 我们能不能用下面的代码构件出 2001/8/8 8:8
import java.io.*;
import java.util.*;
public class WhatIsDate
{
public static void main(String[] args)
{
Date date = new Date(2001, 8, 8, 8, 8, 8);
System.out.println(date);
}
}
Java 的编译器竟然报如下信?(Sun JDK1.3, Windows 2000 中文?
注意Q?/p>
WhatIsDate.java 使用或覆盖一个不鼓励使用的API?/p>
注意Q?/p>
使用-deprecation重新~译Q以得到详细信息。!那么 Date 对象I竟是ؓ了满_个需求呢Q看来它不是用来实现Zq??日小?分钟 的时间表q。我们查?Java 的文档,我们看到?getTime() ҎQ它q回的竟然是一?long 倹{文档进一步又告诉我们q个g表了当前pȝ的时间离1970/1/1 0:0 的毫U差Q而且是在 GMT 时区?也被UCؓ EPOC)。如果我们指定的旉是在此之前的Q那它将q回一个负数倹{这个发现让我们?Date 对象有了一个全新的认识-Date 存放的是?EPOC 的偏差倹{换而言之我们也可通过 long cd来表C时_
对了Q这个猜x得到?Java 的支持:
// W二U获得当前时间的Ҏ
long dateInMilliSeconds = System.currentTimeMillis();// q时候打印出的只是一串数字而已
System.out.println(dateInMilliSeconds);
对程序执行效率敏感的E序员可以发现这个方法只是生成一?Java 的原始类?(primitive type) long, 不需要实例化一个对象。因此如果我们对旉的处理只是在内部q行Ӟ可以?long 来代?Date 对象。最典型的应用就是在一D代码开始和l束?分别获得pȝ当前的时?然后计算Z码执行所需的时?微秒U??nbsp;
long start = System.currentTimeMillis();
// 代码D?nbsp;
System.out.println("需?"+(System.currentTimeMillis()-start)+" 微秒");
那么当我们要把这?long 值已更ؓ友好的表现Ş式显C处理的时候,我们可以用它来构?Date 对象QDate date = new Date(dateInMilliSeconds);System.out.println(date);我们看到了在 Java 中对旉最为基本的表示Q有通过对EPOC 的偏差D行处理。Date 对象是对它的一个对象的装。我们同时也看到了,在现时世界中我们Ҏ间的描述通常是通过"某年某月某日某时某分"来定义的。Date 的显C?实际上是 toString() Ҏ)描述了这些信息,?Java q不我们用这U方式直接来构g Date 对象。因此我们需要找出哪个对象可以实现这个需求。这是我们下面p讲述?Calendar 对象的功能。在我们q一步研I?Calendar 之前Q请C Date 只是一个对 long ?Z GMT 时区)的对象封装。它所表现出来的年/?日小?分钟时区的时间表qͼ只是它的 toString() Ҏ所提供的。千万不要ؓq个假象所qh。假如我们希望定制日期数据的格式, 比方星期?9?29?2001q? 下面的例子展CZ如何完成q个工作:
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 的构造函C递格式字W串"EEE-MMMM-dd-yyyy", 我们p够指明自己想要的格式. 你应该可以看? 格式字符串中的ASCII 字符告诉格式化函C面显C日期数据的哪一个部? EEEE是星? MMMM是月, dd是日, yyyy是年. 字符的个数决定了日期是如何格式化?传?EE-MM-dd-yy"会显C?Sat-09-29-01. 请察看Sun 公司的Web 站点获取日期格式化选项的完整的指示. 1.3. 文本数据解析成日期对?假设我们有一个文本字W串包含了一个格式化了的日期对象, 而我们希望解析这个字W串q从文本日期数据创徏一个日期对? 我们再ơ以格式化字W串"MM-dd-yyyy" 调用SimpleDateFormatc? 但是q一? 我们使用格式化解析而不是生成一个文本日期数? 我们的例? 昄在下? 解析文本字W串"9-29-2001"q创Z个gؓ001736000000 的日期对? 通过parse()ҎQDateFormat能够以一个字W串创立一个Date对象。这个方法能抛出ParseException异常Q所以你必须使用适当的异常处理技术。例子程?
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 = "9-29-2001";
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());
}
}
}
1.4. 使用标准的日期格式化q程
既然我们已经可以生成和解析定制的日期格式? 让我们来看一看如何用内建的格式化过E? Ҏ DateFormat.getDateTimeInstance() 让我们得以用几种不同的方法获得标准的日期格式化过E? 在下面的例子? 我们获取了四个内建的日期格式化过E? 它们包括一个短? 中等? 长的, 和完整的日期格式.
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)); System.out.println(fullDateFormat.format(date));
}
}
注意我们在对 getDateTimeInstance的每ơ调用中都传递了两个? W一个参数是日期风格, 而第二个参数是时间风? 它们都是基本数据cdint(整型). 考虑到可L? 我们使用了DateFormat cL供的帔R: SHORT, MEDIUM, LONG, ?FULL. 要知道获取时间和日期格式化过E的更多的方法和选项, LSun 公司Web 站点上的解释. q行我们的例子程序的时? 它将向标准输备输Z面的内容: 9/29/01 8:44 PM Sep 29, 2001 8:44:45 PM September 29, 2001 8:44:45 PM EDT Saturday, September 29, 2001 8:44:45 PM EDT 2. Calendar 日历c?首先误?Calendar 只是一个抽象类, 也就是说你无法直接获得它的一个实例,换而言之你可以提供一个自己开发的 Calendar 对象。那I竟什么是一?Calendar 呢?中文的翻译就是日历,那我们立d以想到我们生zM有阳(?历、阴(?历之分。它们的区别在哪呢?比如有:月䆾的定?- 阳`(??一q?2 个月Q每个月的天数各不同Q阴(?历,每个月固?8?每周的第一?- ??历星期日是第一天;??历,星期一是第一天实际上Q在历史上有着许多U纪元的Ҏ。它们的差异实在太大了,比如说一个h的生日是"八月八日" 那么一U可能是??历的八月八日Q但也可以是??历的日期。所以ؓ了计时的l一Q必需指定一个日历的选择。那现在最为普及和通用的日历就?"Gregorian Calendar"。也是我们在讲q年份时常用 "公元几几q?。Calendar 抽象cd义了_的方法,让我们能够表q日历的规则。Java 本n提供了对 "Gregorian Calendar" 规则的实现。我们从 Calendar.getInstance() 中所获得的实例就是一?"GreogrianCalendar" 对象(与您通过 new GregorianCalendar() 获得的结果一?。下面的代码可以证明q一点:
import java.io.*;
import java.util.*;
public class WhatIsCalendar
{
public static void main(String[] args)
{
Calendar calendar = Calendar.getInstance();
if (calendar instanceof GregorianCalendar)
System.out.println("It is an instance of GregorianCalendar");
}
}
Calendar ?Java 中是一个抽象类(Abstract Class)QGregorianCalendar 是它的一个具体实现。Calendar ?Date 的{换非常简单: Calendar calendar = Calendar.getInstance(); // 从一?Calendar 对象中获?Date 对象 Date date = calendar.getTime(); // ?Date 对象反应C?Calendar 对象中, // Calendar/GregorianCalendar 没有构造函数可以接?Date 对象 // 所以我们必需先获得一个实例,然后讄 Date 对象 calendar.setTime(date);Calendar 对象在用时Q有一些值得注意的事:
1. Calendar ?set() Ҏ
set(int field, int value) - 是用来设|?q???时/分钟/U?微秒"{值field 的定义在 Calendar 中set(int year, int month, int day, int hour, int minute, int second) 但没有set(int year, int month, int day, int hour, int minute, int second, int millisecond) 前面 set(int,int,int,int,int,int) Ҏ不会自动?MilliSecond 清ؓ 0。另外,月䆾的v始gؓQ而不是1Q所以要讄八月Ӟ我们用7而不?。calendar.set(Calendar.MONTH, 7);我们通常需要在E序逻辑中将它清?0Q否则可能会出现下面的情况:
import java.io.*;
import java.util.*;
public class WhatIsCalendarWrite
{
public static void main(String[] args) throws Exception{
ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream("calendar.out"));
Calendar cal1 = Calendar.getInstance();