posts - 41, comments - 15, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

如果大家在ORACLE里面用惯了Sequence,要在SqlServer里实现Sequence,就会发现没有现成的Sequence对象可以Create了。那应该怎么办呢?

当然这点小问题是难不倒我们程序员的,“max+1啊”,有人会说这样的方式。是的,这种方式实现起来也比较简单。当然你也许还会说,最Sql的方式是采用identity列,自增的方式去增加就ok了。但是这样的列如果要实现“YYYYMMDD”+“部门编号(如ZX)”+Sequence值 (例如:20100707ZX000002)的格式就不行了。还是老老实实用存储过程来取得一个Sequence值吧,使用起来也就随心所欲了。

 

网上常见的一个存储过程为 为当前库所有用到Sequence建一张表,譬如“AllSequence”,内含四个字段【名字,起点值,递增值,当前值】,创建Sequence的时候就创建一条记录,获取Sequence的时候就从对应行的当前值按递增值增加得到。

 

在并发性请求不那么高的系统里,这种过程是没有问题的。但是并发性请求一旦处于某个量级以后,这个过程常常会遇到问题。

 

以下为一个改进方法,适合于高吞吐量的访问请求,比如每秒数千次的请求:

复制代码
-- 假定要给T_0101001创建一个Sequence

-- 创建表SeqT_0101001
create table SeqT_0101001(

      
-- ID列为自增列
      SeqID int identity(1,1primary key,

      
-- Sequence值
      SeqVal varchar(1)
)

-- 创建从SeqT_0101001表获取最新Sequence值的存储过程
create procedure P_GetNewSeqVal_SeqT_0101001
as
begin
      
-- 声明新Sequence值变量
      declare @NewSeqValue int

      
-- 设置插入、删除操作后的条数显示取消
      set NOCOUNT ON

      
-- 插入新值到SeqT_0101001表
      insert into SeqT_0101001 (SeqVal) values ('a')   

      
-- 设置新Sequence值为插入到SeqT_0101001表的标识列内的最后一个标识值  
      set @NewSeqValue = scope_identity()   

      --如果组合的Sequence值<999999999(大于的话数值会溢出),如:“YYYY”+5位的Sequence值(201019988),可以采用下面的方式来实现
      --set @NewSeqValue = Convert(char(4),Getdate(),112) + right('00000'+CAST(scope_identity() AS varchar(5)),5)
      --这样直接Print @NewSeqVal 就可以得到类似“201019988”的Sequence值

      
-- 删除SeqT_0101001表(不显示被锁行)
      delete from SeqT_0101001 WITH (READPAST)

-- 返回新Sequence值
return @NewSeqValue

end

--使用Sequence
Declare @NewSeqVal int
Exec @NewSeqVal =  P_GetNewSeqVal_SeqT_0101001
Print @NewSeqVal
Print Convert(char(8),Getdate(),112) +'ZX'+ right('000000'+CAST(@NewSeqVal AS varchar(5)),6)
复制代码

 


要获取刚才我们提到的 “20100707ZX000002”这种格式的话,下面这样就可以了
Print Convert(char(8),Getdate(),112) +'ZX'+ right('000000'+CAST(@NewSeqVal AS varchar(5)),6)



缺点:不能直接在非存储过程的select的语句中直接使用。

信息来源:http://www.cnblogs.com/heekui/archive/2008/07/24/1250842.html

posted @ 2012-08-06 14:48 yuhaibo736 阅读(1108) | 评论 (0)编辑 收藏

Mongo是没有like查询的方式的 
要进行模糊匹配只能借助于正则表达式


Java代码:

     Mongo m=new Mongo();  

      DB db=m.getDB("UserDB");  

      DBCollection collection=db.getCollection("userCollection");  

       

      BasicDBObject cond=new BasicDBObject();          


      if(province!=""){  

         cond.put("province", province);

      }  

      if(area!=""){  

         cond.put("area", area);  

      }              

      if(keywords!=""){  

          Pattern pattern=Pattern.compile("^.*"+keywords+".*$");            

          cond.put("name", pattern);

      }  

 

      DBCursor returns=collection.find(cond);  

 

还有一种是mongoDB 和Spring结合的 Spring-data的模式查询  代码如下 :

       public List<User> findUserTop9(String s) {  

             mongoTemplate.setDatabaseName("UserDB");

 

             mongoTemplate.setDefaultCollectionName("userColl");  

             List<User> users = mongoTemplate.find(new Query(new Criteria(      "name").regex(".*?"+"张"+".*")).limit(9), User.class);  

             return users;

        }  

posted @ 2012-06-27 15:44 yuhaibo736 阅读(10442) | 评论 (1)编辑 收藏

CronTrigger配置格式:

格式: [秒] [分] [小时] [日] [月] [周] [年]

 序号 说明
 是否必填  允许填写的值 允许的通配符
 1  秒  是  0-59    , - * /
 2  分  是  0-59
  , - * /
 3 小时  是  0-23   , - * /
 4  日  是  1-31   , - * ? / L W
 5  月  是  1-12 or JAN-DEC   , - * /
 6  周  是  1-7 or SUN-SAT   , - * ? / L #
 7  年  否  empty 或 1970-2099  , - * /


通配符说明:
* 表示所有值. 例如:在分的字段上设置 "*",表示每一分钟都会触发。
? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为 0 0 0 10 * ?
- 表示区间。例如 在小时上设置 "10-12",表示 10,11,12点都会触发。
, 表示指定多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发
/ 用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。 在月字段上设置'1/3'所示每月1号开始,每隔三天触发一次。
L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于"7"或"SAT"。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示“本 月最后一个星期五"
W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 "1W",它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,"W"前只能设置具体的数字,不允许区间"-").

小提示

'L'和 'W'可以一组合使用。如果在日字段上设置"LW",则表示在本月的最后一个工作日触发(一般指发工资

# 序号(表示每月的第几个周几),例如在周字段上设置"6#3"表示在每月的第三个周六.注意如果指定"#5",正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了)

小提示

周字段的设置,若使用英文字母是不区分大小写的 MON 与mon相同.


       
常用示例:
 

0 0 12 * * ? 每天12点触发
0 15 10 ? * * 每天10点15分触发
0 15 10 * * ? 每天10点15分触发
0 15 10 * * ? * 每天10点15分触发
0 15 10 * * ? 2005 2005年每天10点15分触发
0 * 14 * * ? 每天下午的 2点到2点59分每分触发
0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)
0 0/5 14,18 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)
每天下午的 18点到18点59分(整点开始,每隔5分触发)
0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发
0 10,44 14 ? 3 WED 3月分每周三下午的 2点10分和2点44分触发
0 15 10 ? * MON-FRI 从周一到周五每天上午的10点15分触发
0 15 10 15 * ? 每月15号上午10点15分触发
0 15 10 L * ? 每月最后一天的10点15分触发
0 15 10 ? * 6L 每月最后一周的星期五的10点15分触发
0 15 10 ? * 6L 2002-2005 从2002年到2005年每月最后一周的星期五的10点15分触发
0 15 10 ? * 6#3 每月的第三周的星期五开始触发
0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次
0 11 11 11 11 ? 每年的11月11号 11点11分触发(光棍节)

posted @ 2012-06-04 17:22 yuhaibo736 阅读(185) | 评论 (0)编辑 收藏

1、下载Quartz java包copy到WEB-INF/lib下
2、先写一个抽象类继承QuartzJobBean
package org.yhb.task;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

/**
 *
 * @author yuhb create on 2012-6-4
 *
 */
public abstract class AbstractTask extends QuartzJobBean {
    protected final Log log = LogFactory.getLog(this.getClass());
    protected void executeInternal(JobExecutionContext context)
            throws JobExecutionException {
        this.execute();
    }
    protected abstract void execute();
}

然后写一个类继承上面的抽象类

package org.yhb.task;

public class MyTask extends AbstractTask {
    @Override
    protected void execute() {
        System.out.println("测试定时任务!!!");
    }
}

3、编写beans-quarz.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <!-- ============================= Spring Quartz ================================ -->
    <bean id="myTask" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="org.yhb.task.MyTask" />
        <property name="jobDataAsMap">
            <map>
                <entry key="timeout">
                    <value>60</value>
                </entry>
            </map>
        </property>
    </bean>
    <!-- 每隔2分钟触发一次-->
    <bean id="myTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="myTask" />
        </property>
        <property name="cronExpression">
            <value>0 0/2 * * * ?</value>
        </property>
    </bean>
    <!-- ########  总调配中心 ########## -->    
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref local="myTaskTrigger" />
             </list>
        </property>
    </bean>    
</beans>
4、在web.xml中进行配置
     <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/beans-quarz.xml</param-value>
    </context-param>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

完成上面四项后,启动服务器就执行定时任务了。

posted @ 2012-06-04 16:25 yuhaibo736 阅读(1473) | 评论 (0)编辑 收藏

1.下载安装:plsqldev
    注意:不要安装在默认的C:\Program Files (x86)目录下,否则会报错,原因是不能解析这个带()的路径
2.下载安转Oracle32位客户端
    下载Oracle客户端软件:instantclient-basic-win32-11.1.0.7.0.zip  http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html
3.配置客户端
1).解压instantclient-basic-win32-11.1.0.7.0.zip后的instantclient_11_2文件放到到D:\oracle_client(具体放那个盘里,自己决定)下,在instantclient_11_2目录下新建network文件,在network目录下建admin文件,在admin文件下建tnsnames.ora这个文件:
bd22 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = orcl)
    )
  )
           
2)启动PL/SQL Developer ,点击取消不要登录,在Tools\Perferences 下的Connection 配置Oracle_Home和OCI Library,如下:
OracleHome:D:\oracle_client\instantclient_11_2
OCI library: D:\oracle_client\instantclient_11_2\oci.dll

3)启动PL/SQL Developer,登陆DB

posted @ 2012-05-31 13:11 yuhaibo736 阅读(15668) | 评论 (1)编辑 收藏


MyEclipse9.0与其他版本不一样:


1.首先下载svn的zip包:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240


 
我的是:site-1.6.18.zip


2.将下载的包解压,*.xml全部不要,只保留plugins和features两个文件夹


3.在任意位置建立文件夹,命名随意,只要符合规范,将上面的两个文件夹拷贝到刚才所建立的文件路径下,我在E盘下建立如下路径:E:\plugins\svn,plugins和features两个文件夹放在svn下


4.建立一个java程序:


import java.io.File; 
import java.util.ArrayList; 
import java.util.List; 

/**
* MyEclipse9 插件配置代码生成器
*
*
*/

public class PluginConfigCreator 

    public PluginConfigCreator()

    public void print(String path) 
        List<String> list = getFileList(path); 
        if (list == null)
            return; 
        } 

        int length = list.size(); 
        for (int i = 0; i < length; i++)
            String result = ""; 
            String thePath = getFormatPath(getString(list.get(i))); 
            File file = new File(thePath); 
            if (file.isDirectory())
                String fileName = file.getName(); 
                if (fileName.indexOf("_") < 0)
                    print(thePath); 
                    continue; 
                } 
                String[] filenames = fileName.split("_"); 
                String filename1 = filenames[0]; 
                String filename2 = filenames[1]; 
                result = filename1 + "," + filename2 + ",file:/" + path + "\\"  + fileName + "\\,4,false"; 
                System.out.println(result); 
            } else if (file.isFile()) 
                String fileName = file.getName(); 
                if (fileName.indexOf("_") < 0)
                    continue; 
                } 
                int last = fileName.lastIndexOf("_");// 最后一个下划线的位置 
                String filename1 = fileName.substring(0, last); 
               String filename2 = fileName.substring(last + 1, fileName.length() - 4); 
                result = filename1 + "," + filename2 + ",file:/" + path + "\\" + fileName + ",4,false"; 
                System.out.println(result); 
            } 
        } 
    } 

    public List<String> getFileList(String path) 
        path = getFormatPath(path); 
        path = path + "/"; 
        File filePath = new File(path); 
        if (!filePath.isDirectory()) 
            return null; 
        } 
        String[] filelist = filePath.list(); 
        List<String> filelistFilter = new ArrayList<String>(); 
        for (int i = 0; i < filelist.length; i++) 
            String tempfilename = getFormatPath(path + filelist[i]); 
            filelistFilter.add(tempfilename); 
        } 
        return filelistFilter; 
    } 

    public String getString(Object object) 
        if (object == null) 
            return ""; 
        } 
        return String.valueOf(object); 
    } 

    public String getFormatPath(String path) 
        path = path.replaceAll("\\\\", "/"); 
        path = path.replaceAll("//", "/"); 
        return path; 
    } 

    public static void main(String[] args) 
        /*你的插件的安装目录*/
            String plugin = "E:\\plugins\\svn";   //这里的目录路径要注意
        new PluginConfigCreator().print(plugin); 
    } 
}


运行该程序,将生成的控制台数据拷贝复制到bundles.info文件中,该文件的所在路径是MyEclipse的安装路径,我采用的是默认路径:


D:\MyEclipse\MyEclipse-9.0M1\configuration\org.eclipse.equinox.simpleconfigurator


最后重启MyEclipse就可以使用SVN了

posted @ 2012-05-30 13:23 yuhaibo736 阅读(2115) | 评论 (2)编辑 收藏

jQuery.ajax({
       url: 'getAssessmentStaffEvaluation.html',
       type: 'post',
       data: 'userId=' + userid + '&startDate=' + startDate + '&endDate=' + endDate,
       dataType:'json',
       success: function(returnObj){
        $("#countTd").text("服务客户次数:" + returnObj.customerService + "    阅读报告篇数:" + returnObj.reportReadLog +"    撰写产品篇数:" + returnObj.htreport + "    完成任务情况:" + returnObj.task + "    工作申请情况:" + returnObj.applyTask);
       }
      });

public ModelAndView getAssessmentStaffEvaluationHandler(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException, ParseException {

  String userId = Utils.trim(request.getParameter("userId"));
  String startDate = Utils.trim(request.getParameter("startDate"));
  String endDate = Utils.trim(request.getParameter("endDate"));
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  Map param = new HashMap();
  param.put("inputid", userId);
  param.put("beginDate", sdf.parse(startDate));
  param.put("endDate", sdf.parse(endDate));
  Response response1 = customerServiceService.getCustomerServiceCount(param);
  Integer count1 = response1.getReturnInt();

  Calendar c = Calendar.getInstance();
  c.setTime(sdf.parse(endDate));
  c.add(Calendar.DATE, 1);
  Map param1 = new HashMap();
  param1.put("userid", userId);
  param1.put("beginDate", sdf.parse(startDate));
  param1.put("endDate", c.getTime());
  Response response2 = reportReadLogService.getReportReadLogCount(param1);
  Integer count2 = (Integer) response2.getReturnObject();

  Response response3 = htreportService.getHtreportCount(param1);
  Integer count3 = (Integer) response3.getReturnObject();

  Map param2 = new HashMap();
  param2.put("createId", userId);
  param2.put("flag", 1);
  param2.put("startTime", sdf.parse(startDate));
  param2.put("endTime", c.getTime());
  Response response4 = taskService.getTaskCount(param2);
  Integer count4 = (Integer) response4.getReturnObject();

  Map param3 = new HashMap();
  param3.put("createId", userId);
  param3.put("beginDate", sdf.parse(startDate));
  param3.put("endDate", c.getTime());
  Response response5 = applyTaskService.getApplyTaskCount(param3);
  Integer count5 = (Integer) response5.getReturnObject();

  response.setContentType("text/json");
  PrintWriter out = response.getWriter();
  out.println("{\"customerService\":\"" + count1 + "\", \"reportReadLog\":\"" + count2 + "\", \"htreport\":\""
          + count3 + "\", \"task\":\"" + count4 + "\", \"applyTask\":\"" + count5 + "\"}");
  out.flush();
  out.close();

  return null;
 }

posted @ 2012-04-18 16:36 yuhaibo736 阅读(2280) | 评论 (2)编辑 收藏

最主要的是设置font

柱状图(CategoryPlot):
    CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象
   CategoryAxis domainAxis=plot.getDomainAxis();
    //水平底部列表
    domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14));
    //水平底部标题
    domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));
    //垂直标题
    ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状
    rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));
     chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
饼图(PiePlot):
     JFreeChart chart = ChartFactory.createPieChart3D("IT行业职业分布图", dataset, true, false, false);
    chart.getTitle().setFont(new Font("黑体",Font.BOLD,20));//设置标题字体
    PiePlot piePlot= (PiePlot) chart.getPlot();//获取图表区域对象
    piePlot.setLabelFont(new Font("黑体",Font.BOLD,10));
    chart.getLegend().setItemFont(new Font("黑体",Font.BOLD,10));
时序图(TimeSeries)  
   XYPlot plot = (XYPlot) chart.getPlot();
    //纵轴字体
    plot.getRangeAxis().setLabelFont(new Font("宋体", Font.BOLD, 15));
    //横轴框里的标题字体
    chart.getLegend().setItemFont(new Font("宋体", Font.ITALIC, 15));
    //横轴列表字体
    plot.getDomainAxis().setTickLabelFont(new Font("新宋体", 1, 15));
    //横轴小标题字体
    plot.getDomainAxis().setLabelFont(new Font("新宋体", 1, 12));
折线图
chart.getTitle().setFont(new Font("宋体", Font.BOLD, 15));
   chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
   CategoryAxis domainAxis = plot.getDomainAxis();   
   /*------设置X轴坐标上的文字-----------*/ 
   domainAxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 11));   
   /*------设置X轴的标题文字------------*/ 
   domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));   
   NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();   
   /*------设置Y轴坐标上的文字-----------*/ 
   numberaxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 12));   
    
   /*------设置Y轴的标题文字------------*/ 
   numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12)) 

posted @ 2012-04-16 14:55 yuhaibo736 阅读(1149) | 评论 (0)编辑 收藏

方式一:

四舍五入
double   f   =   111231.5585;
BigDecimal   b   =   new   BigDecimal(f);
double   f1   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();
保留两位小数

方式二:

java.text.DecimalFormat   df   =new   java.text.DecimalFormat(”#.00″);
df.format(你要格式化的数字);

例:new java.text.DecimalFormat(”#.00″).format(3.1415926)

#.00 表示两位小数 #.0000四位小数 以此类推…

方式三:

double d = 3.1415926;

String result = String .format(”%.2f”);

%.2f %. 表示 小数点前任意位数   2 表示两位小数 格式后的结果为f 表示浮点型。

方式四:

此外如果使用struts标签做输出的话,有个format属性,设置为format="0.00"就是保留两位小数

例如:<bean:write name="entity" property="dkhAFSumPl"  format="0.00" />

posted @ 2012-03-30 14:28 yuhaibo736 阅读(3721) | 评论 (0)编辑 收藏

package com.hefeng.test;

  import java.text.DateFormat;

  import java.text.ParsePosition;

  import java.text.SimpleDateFormat;

  import java.util.Calendar;

  import java.util.Date;

  import java.util.GregorianCalendar;

  public class TimeTest {

  //用来全局控制上一周,本周,下一周的周数变化

  private  int weeks = 0;

  private int MaxDate;//一月最大天数

  private int MaxYear;//一年最大天数

  public static void main(String[] args) {

  TimeTest tt = new TimeTest();

  System.out.println("获取当天日期:"+tt.getNowTime("yyyy-MM-dd"));

  System.out.println("获取本周一日期:"+tt.getMondayOFWeek());

  System.out.println("获取本周日的日期~:"+tt.getCurrentWeekday());

  System.out.println("获取上周一日期:"+tt.getPreviousWeekday());

  System.out.println("获取上周日日期:"+tt.getPreviousWeekSunday());

  System.out.println("获取下周一日期:"+tt.getNextMonday());

  System.out.println("获取下周日日期:"+tt.getNextSunday());

  System.out.println("获得相应周的周六的日期:"+tt.getNowTime("yyyy-MM-dd"));

  System.out.println("获取本月第一天日期:"+tt.getFirstDayOfMonth());

  System.out.println("获取本月最后一天日期:"+tt.getDefaultDay());

  System.out.println("获取上月第一天日期:"+tt.getPreviousMonthFirst());

  System.out.println("获取上月最后一天的日期:"+tt.getPreviousMonthEnd());

  System.out.println("获取下月第一天日期:"+tt.getNextMonthFirst());

  System.out.println("获取下月最后一天日期:"+tt.getNextMonthEnd());

  System.out.println("获取本年的第一天日期:"+tt.getCurrentYearFirst());

  System.out.println("获取本年最后一天日期:"+tt.getCurrentYearEnd());

  System.out.println("获取去年的第一天日期:"+tt.getPreviousYearFirst());

  System.out.println("获取去年的最后一天日期:"+tt.getPreviousYearEnd());

  System.out.println("获取明年第一天日期:"+tt.getNextYearFirst());

  System.out.println("获取明年最后一天日期:"+tt.getNextYearEnd());

  System.out.println("获取本季度第一天到最后一天:"+tt.getThisSeasonTime(11));

  System.out.println("获取两个日期之间间隔天数2008-12-1~2008-9.29:"+TimeTest.getTwoDay("2008-12-1","2008-9-29"));

  }

  public static String getTwoDay(String sj1, String sj2) {

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

  long day = 0;

  try {

  java.util.Date date = myFormatter.parse(sj1);

  java.util.Date mydate = myFormatter.parse(sj2);

  day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);

  } catch (Exception e) {

  return "";

  }

  return day + "";

  }

  public static String getWeek(String sdate) {

  // 再转换为时间

  Date date = TimeTest.strToDate(sdate);

  Calendar c = Calendar.getInstance();

  c.setTime(date);

  // int hour=c.get(Calendar.DAY_OF_WEEK);

  // hour中存的就是星期几了,其范围 1~7

  // 1=星期日 7=星期六,其他类推

  return new SimpleDateFormat("EEEE").format(c.getTime());

  }

  public static Date strToDate(String strDate) {

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

  ParsePosition pos = new ParsePosition(0);

  Date strtodate = formatter.parse(strDate, pos);

  return strtodate;

  }

  public static long getDays(String date1, String date2) {

  if (date1 == null || date1.equals(""))

  return 0;

  if (date2 == null || date2.equals(""))

  return 0;

  // 转换为标准时间

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

  java.util.Date date = null;

  java.util.Date mydate = null;

  try {

  date = myFormatter.parse(date1);

  mydate = myFormatter.parse(date2);

  } catch (Exception e) {

  }

  long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);

  return day;

  }

  // 计算当月最后一天,返回字符串

  public String getDefaultDay(){

  String str = "";

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

  Calendar lastDate = Calendar.getInstance();

  lastDate.set(Calendar.DATE,1);//设为当前月的1号

  lastDate.add(Calendar.MONTH,1);//加一个月,变为下月的1号

  lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天

  str=sdf.format(lastDate.getTime());

  return str;

  }

  // 上月第一天

  public String getPreviousMonthFirst(){

  String str = "";

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

  Calendar lastDate = Calendar.getInstance();

  lastDate.set(Calendar.DATE,1);//设为当前月的1号

  lastDate.add(Calendar.MONTH,-1);//减一个月,变为下月的1号

  //lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天

  str=sdf.format(lastDate.getTime());

  return str;

  }

  //获取当月第一天

  public String getFirstDayOfMonth(){

  String str = "";

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

  Calendar lastDate = Calendar.getInstance();

  lastDate.set(Calendar.DATE,1);//设为当前月的1号

  str=sdf.format(lastDate.getTime());

  return str;

  }

 

 

 

  // 获得本周星期日的日期

  public String getCurrentWeekday() {

  weeks = 0;

  int mondayPlus = this.getMondayPlus();

  GregorianCalendar currentDate = new GregorianCalendar();

  currentDate.add(GregorianCalendar.DATE, mondayPlus+6);

  Date monday = currentDate.getTime();

  DateFormat df = DateFormat.getDateInstance();

  String preMonday = df.format(monday);

  return preMonday;

  }

  //获取当天时间

  public String getNowTime(String dateformat){

  Date   now   =   new   Date();

  SimpleDateFormat   dateFormat   =   new   SimpleDateFormat(dateformat);//可以方便地修改日期格式

  String  hehe  = dateFormat.format(now);

  return hehe;

  }

  // 获得当前日期与本周日相差的天数

  private int getMondayPlus() {

  Calendar cd = Calendar.getInstance();

  // 获得今天是一周的第几天,星期日是第一天,星期二是第二天......

  int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK)-1;         //因为按中国礼拜一作为第一天所以这里减1

  if (dayOfWeek == 1) {

  return 0;

  } else {

  return 1 - dayOfWeek;

  }

  }

  //获得本周一的日期

  public String getMondayOFWeek(){

  weeks = 0;

  int mondayPlus = this.getMondayPlus();

  GregorianCalendar currentDate = new GregorianCalendar();

  currentDate.add(GregorianCalendar.DATE, mondayPlus);

  Date monday = currentDate.getTime();

  DateFormat df = DateFormat.getDateInstance();

  String preMonday = df.format(monday);

  return preMonday;

  }

  //获得相应周的周六的日期

  public String getSaturday() {

  int mondayPlus = this.getMondayPlus();

  GregorianCalendar currentDate = new GregorianCalendar();

  currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks + 6);

  Date monday = currentDate.getTime();

  DateFormat df = DateFormat.getDateInstance();

  String preMonday = df.format(monday);

  return preMonday;

  }

  // 获得上周星期日的日期

  public String getPreviousWeekSunday() {

  weeks=0;

  weeks--;

  int mondayPlus = this.getMondayPlus();

  GregorianCalendar currentDate = new GregorianCalendar();

  currentDate.add(GregorianCalendar.DATE, mondayPlus+weeks);

  Date monday = currentDate.getTime();

  DateFormat df = DateFormat.getDateInstance();

  String preMonday = df.format(monday);

  return preMonday;

  }

  // 获得上周星期一的日期

  public String getPreviousWeekday() {

  weeks--;

  int mondayPlus = this.getMondayPlus();

  GregorianCalendar currentDate = new GregorianCalendar();

  currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks);

  Date monday = currentDate.getTime();

  DateFormat df = DateFormat.getDateInstance();

  String preMonday = df.format(monday);

  return preMonday;

  }

  // 获得下周星期一的日期

  public String getNextMonday() {

  weeks++;

  int mondayPlus = this.getMondayPlus();

  GregorianCalendar currentDate = new GregorianCalendar();

  currentDate.add(GregorianCalendar.DATE, mondayPlus + 7);

  Date monday = currentDate.getTime();

  DateFormat df = DateFormat.getDateInstance();

  String preMonday = df.format(monday);

  return preMonday;

  }

  // 获得下周星期日的日期

  public String getNextSunday() {

  int mondayPlus = this.getMondayPlus();

  GregorianCalendar currentDate = new GregorianCalendar();

  currentDate.add(GregorianCalendar.DATE, mondayPlus + 7+6);

  Date monday = currentDate.getTime();

  DateFormat df = DateFormat.getDateInstance();

  String preMonday = df.format(monday);

  return preMonday;

  }

 

 

 

  private int getMonthPlus(){

  Calendar cd = Calendar.getInstance();

  int monthOfNumber = cd.get(Calendar.DAY_OF_MONTH);

  cd.set(Calendar.DATE, 1);//把日期设置为当月第一天

  cd.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天

  MaxDate=cd.get(Calendar.DATE);

  if(monthOfNumber == 1){

  return -MaxDate;

  }else{

  return 1-monthOfNumber;

  }

  }

  //获得上月最后一天的日期

  public String getPreviousMonthEnd(){

  String str = "";

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

  Calendar lastDate = Calendar.getInstance();

  lastDate.add(Calendar.MONTH,-1);//减一个月

  lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天

  lastDate.roll(Calendar.DATE, -1);//日期回滚一天,也就是本月最后一天

  str=sdf.format(lastDate.getTime());

  return str;

  }

  //获得下个月第一天的日期

  public String getNextMonthFirst(){

  String str = "";

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

  Calendar lastDate = Calendar.getInstance();

  lastDate.add(Calendar.MONTH,1);//减一个月

  lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天

  str=sdf.format(lastDate.getTime());

  return str;

  }

  //获得下个月最后一天的日期

  public String getNextMonthEnd(){

  String str = "";

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

  Calendar lastDate = Calendar.getInstance();

  lastDate.add(Calendar.MONTH,1);//加一个月

  lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天

  lastDate.roll(Calendar.DATE, -1);//日期回滚一天,也就是本月最后一天

  str=sdf.format(lastDate.getTime());

  return str;

  }

  //获得明年最后一天的日期

  public String getNextYearEnd(){

  String str = "";

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

  Calendar lastDate = Calendar.getInstance();

  lastDate.add(Calendar.YEAR,1);//加一个年

  lastDate.set(Calendar.DAY_OF_YEAR, 1);

  lastDate.roll(Calendar.DAY_OF_YEAR, -1);

  str=sdf.format(lastDate.getTime());

  return str;

  }

  //获得明年第一天的日期

  public String getNextYearFirst(){

  String str = "";

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

  Calendar lastDate = Calendar.getInstance();

  lastDate.add(Calendar.YEAR,1);//加一个年

  lastDate.set(Calendar.DAY_OF_YEAR, 1);

  str=sdf.format(lastDate.getTime());

  return str;

  }

  //获得本年有多少天

  private int getMaxYear(){

  Calendar cd = Calendar.getInstance();

  cd.set(Calendar.DAY_OF_YEAR,1);//把日期设为当年第一天

  cd.roll(Calendar.DAY_OF_YEAR,-1);//把日期回滚一天。

  int MaxYear = cd.get(Calendar.DAY_OF_YEAR);

  return MaxYear;

  }

  private int getYearPlus(){

  Calendar cd = Calendar.getInstance();

  int yearOfNumber = cd.get(Calendar.DAY_OF_YEAR);//获得当天是一年中的第几天

  cd.set(Calendar.DAY_OF_YEAR,1);//把日期设为当年第一天

  cd.roll(Calendar.DAY_OF_YEAR,-1);//把日期回滚一天。

  int MaxYear = cd.get(Calendar.DAY_OF_YEAR);

  if(yearOfNumber == 1){

  return -MaxYear;

  }else{

  return 1-yearOfNumber;

  }

  }

  //获得本年第一天的日期

  public String getCurrentYearFirst(){

  int yearPlus = this.getYearPlus();

  GregorianCalendar currentDate = new GregorianCalendar();

  currentDate.add(GregorianCalendar.DATE,yearPlus);

  Date yearDay = currentDate.getTime();

  DateFormat df = DateFormat.getDateInstance();

  String preYearDay = df.format(yearDay);

  return preYearDay;

  }

 

 

 

  //获得本年最后一天的日期 *

  public String getCurrentYearEnd(){

  Date date = new Date();

  SimpleDateFormat   dateFormat   =   new   SimpleDateFormat("yyyy");//可以方便地修改日期格式

  String  years  = dateFormat.format(date);

  return years+"-12-31";

  }

  //获得上年第一天的日期 *

  public String getPreviousYearFirst(){

  Date date = new Date();

  SimpleDateFormat   dateFormat   =   new   SimpleDateFormat("yyyy");//可以方便地修改日期格式

  String  years  = dateFormat.format(date); int years_value = Integer.parseInt(years);

  years_value--;

  return years_value+"-1-1";

  }

  //获得上年最后一天的日期

  public String getPreviousYearEnd(){

  weeks--;

  int yearPlus = this.getYearPlus();

  GregorianCalendar currentDate = new GregorianCalendar();

  currentDate.add(GregorianCalendar.DATE,yearPlus+MaxYear*weeks+(MaxYear-1));

  Date yearDay = currentDate.getTime();

  DateFormat df = DateFormat.getDateInstance();

  String preYearDay = df.format(yearDay);

  getThisSeasonTime(11);

  return preYearDay;

  }

  //获得本季度

  public String getThisSeasonTime(int month){

  int array[][] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};

  int season = 1;

  if(month>=1&&month<=3){

  season = 1;

  }

  if(month>=4&&month<=6){

  season = 2;

  }

  if(month>=7&&month<=9){

  season = 3;

  }

  if(month>=10&&month<=12){

  season = 4;

  }

  int start_month = array[season-1][0];

  int end_month = array[season-1][2];

  Date date = new Date();

  SimpleDateFormat   dateFormat   =   new   SimpleDateFormat("yyyy");//可以方便地修改日期格式

  String  years  = dateFormat.format(date);

  int years_value = Integer.parseInt(years);

  int start_days =1;//years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);

  int end_days = getLastDayOfMonth(years_value,end_month);

  String seasonDate = years_value+"-"+start_month+"-"+start_days+";"+years_value+"-"+end_month+"-"+end_days;

  return seasonDate;

  }

  private int getLastDayOfMonth(int year, int month) {

  if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8

  || month == 10 || month == 12) {

  return 31;

  }

  if (month == 4 || month == 6 || month == 9 || month == 11) {

  return 30;

  }

  if (month == 2) {

  if (isLeapYear(year)) {

  return 29;

  } else {

  return 28;

  }

  }

  return 0;

  }

  public boolean isLeapYear(int year) {

  return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);

  }

  }

posted @ 2012-03-30 13:19 yuhaibo736 阅读(251) | 评论 (0)编辑 收藏

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