??xml version="1.0" encoding="utf-8" standalone="yes"?>
5.格式化输出日期时?Q这个用的比较多Q?br />
Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String time=df.format(date);
System.out.println(time);
需要注意的一点:SimpleDateFormatcL式化一个字W串Ӟ可根据需要调?format() ?parse() 函数Q只不过format()q回StringcdQparse()q回java.util.Datecd
6.计算一q中的第几星?br />
(1)计算某一天是一q中的第几星?br />
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
int weekno=cal.get(Calendar.WEEK_OF_YEAR);
(2)计算一q中的第几星期是几号
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.WEEK_OF_YEAR, 1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(df.format(cal.getTime()));
输出:
2006-01-02
7.add()和roll()的用?不太常用)
(1)add()Ҏ
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.add(Calendar.DATE, -4);
Date date=cal.getTime();
System.out.println(df.format(date));
cal.add(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));
输出Q?br />
2006-08-30
2006-09-03
(2)rollҎ
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.roll(Calendar.DATE, -4);
date=cal.getTime();
System.out.println(df.format(date));
cal.roll(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));
输出Q?br />
2006-09-29
2006-09-03
可见Qroll()Ҏ在本月内循环Q一般用add()ҎQ?br />
8.计算两个L旉中间的间隔天敎ͼq个比较常用Q?br />
(1)传进Calendar对象
public int getIntervalDays(Calendar startday,Calendar endday){
if(startday.after(endday)){
Calendar cal=startday;
startday=endday;
endday=cal;
}
long sl=startday.getTimeInMillis();
long el=endday.getTimeInMillis();
long ei=el-sl;
return (int)(ei/(1000*60*60*24));
}
(2)传进Date对象
public int getIntervalDays(Date startday,Date endday){
if(startday.after(endday)){
Date cal=startday;
startday=endday;
endday=cal;
}
long sl=startday.getTime();
long el=endday.getTime();
long ei=el-sl;
return (int)(ei/(1000*60*60*24));
}
(3)改进_计算盔R天数的方?br />
public int getDaysBetween (Calendar d1, Calendar d2){
if (d1.after(d2)){
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2){
d1 = (Calendar) d1.clone();
do{
days += d1.getActualMaximum(Calendar.DAY_F_YEAR);//得到当年的实际天?br />
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
}
注意Q通过上面的方法可以衍生出求Q何时_如要查出邮箱三周之内收到的邮Ӟ得到当前pȝ旉Q再得到三周前时_用收件的旉d?最好装化成 longL?br />
如:1q前日期Q注意毫U的转换Q?br />
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);
3周前的日?br />
Calendar cal3 = Calendar.getInstance();
cal3.add(cal3.DATE, -21);//?周前的日?br />
String date = formatter.format(cal3.getTime());
9. String ?Date QLong 之间怺转换 Q最常用Q?br />
字符串{化成旉cdQ字W串可以是Q意类型,只要和SimpleDateFormat中的格式一致即可)
通常我们取时间跨度的时候,会substring出具体时_QlongQ比?br />
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);
java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");
long dvalue=d.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String mDateTime1=formatter.format(d);
10. 通过旉求时?br />
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);
求是星期?br />
mydate= myFormatter.parse("2001-1-1");
SimpleDateFormat formatter4 = new SimpleDateFormat("E");
String mydate3=formatter4.format(mydate);
11. java ?具体的数据库l合
在开发web应用中,针对不同的数据库日期cdQ我们需要在我们的程序中Ҏ期类型做各种不同的{换。若对应数据库数据是oracle的DatecdQ即只需要年月日的,可以选择使用java.sql.DatecdQ若对应的是MSsqlserver 数据库的DateTimecdQ即需要年月日时分U的Q选择java.sql.Timestampcd
你可以用dateFormat定义旉日期的格式,转一个字W串卛_
class Datetest{
*method 字W串cd的日期{换ؓ一个timestampQ时间戳记java.sql.TimestampQ?br />
*@paramdateString 需要{换ؓtimestamp的字W串
*@returndataTime timestamp
public final static java.sql.Timestamp string2Time(String dateString)
throws java.text.ParseException {
DateFormat dateFormat;
dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//讑֮格式
//dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//utilcd
java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestampcd,timeDate.getTime()q回一个long?br />
return dateTime;
}
*method 字W串cd的日期{换ؓ一个DateQjava.sql.DateQ?br />
*@paramdateString 需要{换ؓDate的字W串
*@returndataTime Date
public final static java.sql.Date string2Date(String dateString)
throws java.lang.Exception {
DateFormat dateFormat;
dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//utilcd
java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sqlcd
return dateTime;
}
public static void main(String[] args){
Date da = new Date();
注意Q这个地方da.getTime()得到的是一个long型的?br />
System.out.println(da.getTime());
由日期date转换为timestamp
W一U方法:使用new Timestamp(long)
Timestamp t = new Timestamp(new Date().getTime());
System.out.println(t);
W二U方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)
Timestamp tt = new Timestamp(Calendar.getInstance().get(
Calendar.YEAR) - 1900, Calendar.getInstance().get(
Calendar.MONTH), Calendar.getInstance().get(
Calendar.DATE), Calendar.getInstance().get(
Calendar.HOUR), Calendar.getInstance().get(
Calendar.MINUTE), Calendar.getInstance().get(
Calendar.SECOND), 0);
System.out.println(tt);
try {
String sToDate = "2005-8-18";//用于转换成java.sql.Date的字W串
String sToTimestamp = "2005-8-18 14:21:12.123";//用于转换成java.sql.Timestamp的字W串
Date date1 = string2Date(sToDate);
Timestamp date2 = string2Time(sToTimestamp);
System.out.println("Date:"+date1.toString());//l果昄
System.out.println("Timestamp:"+date2.toString());//l果昄
}catch(Exception e) {
e.printStackTrace();
}
}
}
一、Date的构造函?br />
1.1构造一个反映当时时间的Date实例
Date
public Date()
构造一个Date对象q对其进行初始化以反映当前时间?br />
1.2从一个长整型数据构造一个Date实例
Date
public Date(long date)
构造一个Date对象QƈҎ相对于GMT 1970q???0:00:00的毫U数对其q行初始化?br />
参数Q?br />
date - 相对于GMT 1970q???0:00:00的毫U数?br />
1.3从年月日时分U构造一个Date实例
Date
public Date(int year,
int month,
int date)
public Date(int year,
int month,
int date,
int hrs,
int min)
public Date(int year,
int month,
int date,
int hrs,
int min,
int sec)
q三个构造函数均不推荐用,在JDK 1.1版中Q分别被Calendar.set(year + 1900, month, date)或GregorianCalendar(year + 1900, month, date)、Calendar.set(year + 1900, month, date, hrs, min)?GregorianCalendar(year + 1900, month, date, hrs, min)、Calendar.set(year + 1900, month, date, hrs, min, sec)或GregorianCalendar(year + 1900, month, date, hrs, min, sec)代替?br />
dExcel的类Q?br />
public class ReadExcel {
public static void main(String args[]) {
try {
Workbook book = Workbook.getWorkbook(new File("f:\\test.xls"));
//获得W一个工作表对象
Sheet sheet = book.getSheet(0);
//得到W一列第一行的单元?br />
Cell cell1 = sheet.getCell(0,0);
String result = cell1.getContents();
System.out.println(result);
//得到整个W一?br />
Cell [] ces = sheet.getColumn(0);
for (int i = 0; i < ces.length; i++) {
System.err.println(ces[i].getContents());
}
//得到整个W一?br />
Cell [] crs = sheet.getRow(0);
for (int i = 0; i < crs.length; i++) {
System.err.println(crs[i].getContents());
}
book.close();
} catch (Exception e) {
System.out.println(e);
}
}
//修改Excel的类
public class UpdateExcel {
public static void main(String args[]) {
try {
//Excel获得文g
Workbook wb = Workbook.getWorkbook(new File("f:\\test.xls" ));
//打开一个文件的副本Qƈ且指定数据写回到原文?br />
WritableWorkbook book = Workbook.createWorkbook(new File("f:\\test.xls"),wb);
//d一个工作表
//W一个参敎ͼ新添加的面名称?表示它的位置Q从零开始,2表示W三?br />
WritableSheet sheet = book.createSheet("W二?",2);
sheet.addCell(new Label(0,0," W二늚试数据 " ));
book.write();
book.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
其他操作Q?br />
其他操作
一?数据格式?br />
在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满一般的应用?br />
1?字串格式?br />
字符串的格式化涉及到的是字体、粗l、字L元素Q这些功能主要由WritableFont和WritableCellFormatcL负责?br />
假设我们在生成一个含有字串的单元格时Q用如下语句,为方便叙qͼ我们为每一行命令加了编P
WritableFont font1 = new WritableFont(WritableFont.TIMES, 16 ,WritableFont.BOLD); ?br />
WritableCellFormat format1 = new WritableCellFormat(font1); ?br />
Label label = new Label( 0 , 0 ,”data 4 test”,format1) ?br />
其中
①指定了字串格式Q字体ؓTIMESQ字?6Q加_显C。WritableFont有非怸富的 构造子Q供不同情况下用,jExcelAPI的java-doc中有详细列表Q这里不再列出?br />
②处代码使用了WritableCellFormatc,q个c非帔R要,通过它可以指定单元格的各U属性,后面的单元格格式化中会有更多描述?br />
③处使用了Labelcȝ构造子Q指定了字串被赋予那U格式。在WritableCellFormatcMQ还有一个很重要的方法是指定数据的对齐方式?br />
比如针对我们 上面的实例,可以指定Q?br />
//把水q_齐方式指定ؓ居中
format1.setAlignment(jxl.format.Alignment.CENTRE);
//把垂直对齐方式指定ؓ居中
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
二、单元格操作
Excel中很重要的一部分是对单元格的操作Q比如行高、列宽、单元格合ƈ{,所qjExcelAPI提供了这些支持。这些操作相Ҏ较简单,下面只介l一下相关的API?br />
1?合ƈ单元?br />
WritableSheet.mergeCells( int m, int n, int p, int q);
//作用是从(m,n)?p,q)的单元格全部合ƈQ比如:
WritableSheet sheet = book.createSheet(“W一?#8221;, 0 );
//合ƈW一列第一行到W六列第一行的所有单元格
sheet.mergeCells( 0 , 0 , 5 , 0 );
合ƈ既可以是横向的,也可以是U向的。合q后的单元格不能再次q行合ƈQ否则会触发异常?/p>
2?行高和列?br />
WritableSheet.setRowView(int i,int height);
//作用是指定第i+1行的高度Q比如:
//第一行的高度设ؓ200
sheet.setRowView(0,200);
WritableSheet.setColumnView(int i,int width);
//作用是指定第i+1列的宽度Q比如:
//第一列的宽度设ؓ30
sheet.setColumnView(0,30);
jExcelAPIq有其他的一些功能,比如插入囄{,q里׃再一一介绍Q读者可以自己探索?br />
其中Q如果读一个excelQ需要知道它有多行和多列Q如下操作:
Workbook book = Workbook.getWorkbook(new File("试1.xls"));
//获得W一个工作表对象
Sheet sheet = book.getSheet(0);
//得到W一列第一行的单元?br />
int columnum = sheet.getColumns();//得到列数
int rownum = sheet.getRows();//得到行数
System.out.println(columnum);
System.out.println(rownum);
for(int i = 0;i < rownum;i ++ )//循环q行d
{
for(int j = 0;j < columnum;j ++) {
Cell cell1 = sheet.getCell(j, i);
String result = cell1.getContents();
System.out.print(result);
System.out.print( " \t " );
}
System.out.println();
}
book.close();
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SyBaseJDBC {
public static void main(String[] args) {
ResultSet rs = null;
Statement stmt = null;
Connection conn = null;
String driver = "com.sybase.jdbc3.jdbc.SybDriver";
String url = "jdbc:sybase:Tds:127.0.0.1:5000/eomsdbbk?user=develop&password=develop&useUnicode=true?CHARSET=cp936";
// 加蝲驱动
try {
Class.forName(driver);
conn = DriverManager.getConnection(url);
stmt = (Statement) conn.createStatement();
rs = stmt.executeQuery("select * from tbAddrListGrp ");
while (rs.next()) {
System.out.println(rs.getInt("iAddrListGrpId"));
System.out.println(rs.getInt("iPid"));
System.out.println(rs.getString("sName"));
System.out.println(rs.getString("sRemark"));
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
import staticQ很多static的东西可以直接用,不过我不认ؓq是个什么好Ҏ,可能会带来乱,本来本类的方法直接调用就可以了,现在导入的静态方法和成员也可以直接用了,有的时候就不好分清Q?br />
import static java.lang.System.*; public class Main{ public static void main(String[] args) { out.print("Hello World"); } }
java代码块分4大块(普通代码块、构造块、静态块、同步代码块Q多U程Q?
普通代码块 —?nbsp; 指写在一?span style="color: #ff0000">Ҏ中的语句?/p>
构造块 ——直接写?span style="color: #ff0000">cM的语句块Q优先于构造方?/p>
静态块 ——直接写在类中,通过static声明的语句块Q?span style="color: #ff0000">优先于构造块和构造方?/p>
同步代码?nbsp; ——暂不解?/p>
CZ
// 静态代码块 static { System.out.println("static code() ..."); } // 声明一个构造方?br /> Test() { System.out.println("Person()构造方?); } // 构造块 { System.out.println("Hello World!!!"); } |
执行l果
static code() ... Hello World!!! Person()构造方?br /> Hello World!!! Person()构造方?/span> |
解决Ҏ如下:
/**
* ?span class="hilite1">double数据q行取精?
* @param value double数据.
* @param scale _ֺ位数(保留的小C?.
* @param roundingMode _ֺ取值方?
* @return _ֺ计算后的数据.
*/
public static double round(double value, int scale,
int roundingMode) {
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(scale, roundingMode);
double d = bd.doubleValue();
bd = null;
return d;
}
/**
* double 相加
* @param d1
* @param d2
* @return
*/
public double sum(double d1,double d2){
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.add(bd2).doubleValue();
}
/**
* double 相减
* @param d1
* @param d2
* @return
*/
public double sub(double d1,double d2){
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.subtract(bd2).doubleValue();
}
/**
* double 乘法
* @param d1
* @param d2
* @return
*/
public double mul(double d1,double d2){
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.multiply(bd2).doubleValue();
}
/**
* double 除法
* @param d1
* @param d2
* @param scale 四舍五入 数点位?
* @return
*/
public double div(double d1,double d2,int scale){
// 当然在此之前Q你要判断分母是否ؓ0Q?nbsp;
// ?你可以根据实际需求做相应的处?
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.divide
(bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
q样Q计?span class="hilite1">doublecd的数据计问题就可以处理了?
另外补充一?JavaScript 四舍五入的方法:
数炚w?
Math.round(totalAmount*100)/100 (保留 2 ?
function formatFloat(src, pos)
{
return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos);
}
然后我们回到Eclipse的开发环境,输入"a"Q提C就出现了?/font>
但是我们可以发现Q这?font face="Times New Roman">Auto-Activation下的输入框里最多只能输?/font>4个字母,也许?/font>Eclipse的开发h员担心我们输入的太多会媄响性能Q但计算机的性能不用白不用,所以我们要打破q个限制?/font>
其实上面都是铺垫Q制造一下气氛,以显得我们下面要做的事情很牛似的Q其实不Ӟ一切都很简单。嘿?nbsp;
?font face="Times New Roman">"."后面随便输入几个字符Q比?/font>"abij"Q然后回到开发环境,File -> export -> general -> preferences-> 选一个地方保存你的首选项Q比?/font>C:\a.epf
用Q何文本编辑器打开a.epfQ查扑֭W串“abij”Q找C后,替换?#8220;.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”QM是你想怎样怎样Q!然后回到EclipseQ?/font>File -> import -> general -> preferences -> 导入刚才?/font>a.epf文g。此时你会发现输入Q何字q都可以得到自动提示了。爽Q!Q?/font>
最后:自动提示弹出的时间最好改?font face="Times New Roman">100毫秒以下Q这样会比较爽一点,不然你都完事了,自动提示才弹出来Q不q也要看机器性能?/font>
扑ֈtomcat的conf目录 打开server.xml文g
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
把port 值改?081Q就ok?nbsp;
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Jdbc {
/**
* @param args
*/
public static void main(String[] args) {
ResultSet rs = null;
Statement stmt = null;
Connection conn = null;
String driver = "org.gjt.mm.mysql.Driver";
String url ="jdbc:mysql://localhost/mydata?user=root&password=root&useUnicode=true&characterEncoding=8859_1";
//加蝲驱动
try {
Class.forName(driver);
conn = DriverManager.getConnection(url);
stmt = (Statement) conn.createStatement();
rs =stmt.executeQuery("select * from dept");
while(rs.next())
{
System.out.println(rs.getString("deptno"));
System.out.println(rs.getString("dname"));
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally
{
try
{
if(rs != null)
{
rs.close();
rs = null;
}
if(conn != null)
{
conn.close();
conn = null;
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
}