首页 > 编程语言 >java日期操作

java日期操作

时间:2023-09-20 10:33:02浏览次数:41  
标签:java System util println 日期 Date 操作 out

将Date类型写入数据库的两种方法


先了解几个类: 


1、具体类(和抽象类相对)java.util.Date  


2、抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat  


3、抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar  


具体类可以被实例化, 但是抽象类却不能. 你首先必须实现抽象类的一个具体子类. 


************************************


一种将java的日期类型直接转换为SQL的日期类型的方法,比较简单但适用性狭窄,


注意一下例子在jdk下编译没有时间,但在jb和Eclipse下就有时间,不知怎么回事


——————————————


public class a { 

 

  public static void main(String[] args) { 

 

     

 

    java.util.Date now = new Date(); 

 

    //PreparedStatement类型的setDate方法只接受sql.date类型,所有必须先转换 

 

    java.sql.Date sqlnow = new java.sql.Date(now.getTime()); 

 

     try { 

 

      //froName必须放在try中,否则编译不通过,可能froName方法抛出编译时异常了 

 

      //经查阅 public static Class forName(String className) throws     ClassNotFoundException {...} 

 

      Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 

 

      Connection connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://192.168.0.2:1433;DatabaseName=pubs","sa",""); 

 

      PreparedStatement ps=connection.prepareStatement("update test set f1=?"); 

 

      ps.setDate(1,sqlnow); 

 

      int i = ps.executeUpdate(); 

 

     } 

 

      catch (Exception ex) {} 

 

   } 

 

  }

**********************************************************


另一种是将java的date类型通过SimpleDateFormat转换为字符串,再写到sql语句中


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

import java.sql.*; 

 

  import java.text.SimpleDateFormat; 

 

  import java.util.Date; 

 

  public class a{ 

 

    public static void main(String[] args) { 

 

    //之所以用kk而不用hh是因为kk是24进制的而不虽操作系统设置变动 

 

    SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd kk:mm:ss"); 

 

    Date now = new Date(); 

 

    //format()方法的返回值是String型 

 

    System.out.println(sdf.format(date)); 

 

   }}

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


一下是逆操作,将String转换为Date,parse()方法能抛出ParseException异常,所以你必须使用适当的异常处理技术


try{ 

 

      SimpleDateFormat sbf =new SimpleDateFormat("yyyy-MM-dd kk:mm:ss"); 

 

      String sdate="2004-05-14 21:29:51"; 

 

      Date ddate = sbf.parse(sdate); 

 

      System.out.println(ddate); 

 

      } 

 

  catch (Exception ex) { }

**************************************************************


以下是副产品,我们用到的情况比较少


util.date类型


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

//1年前日期 

 

     java.util.Date myDate=new java.util.Date();   

 

     long myTime=(myDate.getTime()/1000)-60*60*24*365; 

 

     myDate.setTime(myTime*1000); 

 

     //明天日期 

 

     myDate=new java.util.Date();  

 

     myTime=(myDate.getTime()/1000)+60*60*24; 

 

     myDate.setTime(myTime*1000); 

 

    //两个时间之间的天数 

 

     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); 

 

     //年月周求日期 

 

     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); 

 

     //求是星期几 

 

     mydate= myFormatter.parse("2001-1-1"); 

 

     SimpleDateFormat formatter4 = new SimpleDateFormat("E"); 

 

     String mydate3=formatter4.format(mydate); 

 

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

 

   now.getYear();//实际年份减去1900,如果构造函数为Date(2008,2,25)则不减1900,如果构造函数为Date(17009456745)或者setTime(17009456745)还减1900 

 

   now.getMonth();//实际月份减去1,如果构造函数为Date(2008,2,25)则不减1,如果构造函数为Date(17009456745)或者setTime(17009456745)还减1900 

 

   now.getDay();//*,原来是取星期,不知sun公司是咋想的,脑袋进水了。 

 

   now.getDate();//这才是取1~31之间的日 

 

   now.getHours();//24进制的小时 

 

   now.getMinutes();//分 

 

   now.getSeconds();//秒 

 

   now.getTime();//返回1970年1月1日00:00:00起至今的毫秒数 

 

   now.setTime(long time);//真实日期为1970年1月1日午夜+time毫秒

*************************************


日历类型的子类GregorianCalendar类型


构造函数GregorianCalendar(int year, int month, int date) ,无参数为但前时间


注意月份的表示,一月是0,二月是1,以此类推。因此最好使用单词而不是使用数字来表示月份。父类Calendar使用常量来表示月份:JANUARY, FEBRUARY...


所以1903年12月17日可以写为

GregorianCalendar aaa = new GregorianCalendar(1903, Calendar.DECEMBER, 17) 

 

  GregorianCalendar aaa = new GregorianCalendar(1903, 11, 17);


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


import java.util.Date; 

 

  import java.text.DateFormat; 

 

  import java.util.GregorianCalendar; 

 

  public class a { 

 

  public static void main(String[] args) { 

 

    DateFormat df =  DateFormat.getDateInstance(DateFormat.FULL); 

 

    GregorianCalendar gca = new GregorianCalendar(); 

 

    //getTime()方法是将GregorianCalendar对象转换为Date对象 

 

    gca.setTime(new Date()); 

 

    System.out.println("系统时间: " +df.format(gca.getTime())); 

 

    //set 方法能够让我们通过简单的设置星期中的哪一天这个域来将我们的时间调整为星期五.注意到这里我们使用了常量 DAY_OF_WEEK 和 FRIDAY来增强代码的可读性. 

 

    //如果当前为星期五时间不变 

 

    gca.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY); 

 

    System.out.println("下一个星期五: " +  df.format(gca.getTime())); 

 

    //add 方法让我们能够在日期上加上数值.  

 

    gca.add(GregorianCalendar.DAY_OF_MONTH, 8); 

 

    System.out.println("再加8天: " +  df.format(gca.getTime())); 

 

    //get方法取对象中的一部分 

 

    int i =  gca.get(GregorianCalendar.DAY_OF_MONTH); 

 

    System.out.println(i); 

 

  }}


***************************************


Locale类:(java.util.Locale)


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


import java.util.Locale; 

 

  public class a { 

 

   public static void main(String[] args) { 

 

    Locale localeEN = new Locale("en", "US"); 

 

    //另一实例化方法=locale.ENGLISH; 

 

    System.out.println("Display Name: " +localeEN.getDisplayName()); 

 

    System.out.println("Country: " + localeEN.getCountry()); 

 

    System.out.println("Language: " + localeEN.getLanguage()); 

 

    Locale localeFR = new Locale("fr", "FR"); 

 

    System.out.println("\nDisplay Name: " +localeFR.getDisplayName()); 

 

    System.out.println("Country: " + localeFR.getCountry()); 

 

    System.out.println("Language: " + localeFR.getLanguage()); 

 

    // 用三种语言显示本机语言、英语、法语 

 

    System.out.println("用本语显示DisplayName: "+ localeEN.getDisplayName()); 

 

    System.out.println("用英语显示DisplayName:"+   localeEN.getDisplayName(localeEN )); 

 

    System.out.println("用法语显示DisplayName:"+   localeEN.getDisplayName(localeFR )); 

 

   } 

 

  }


*****************************************************


把Date以不同地域的格式显示:java.text.DateFormat


getDateTimeInstance()的前两个参数分别代表日期风格和时间风格,取值为SHORT, MEDIUM, LONG, 和 FULL


getDateInstance()方法:Java还提供了几个选择日期格式,你可以通过使用重载的getDateInstance(int style)获得。出于方便的原因,DateFormat提供了几种预置的常量,你可以使用这些常量参数SHORT, MEDIUM, LONG, 和FULL


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

import java.util.Locale; 

 

  import java.text.DateFormat; 

 

  import java.util.Date; 

 

  public class a { 

 

    public static void main(String[] args) {      

 

      Date now=new Date(); 

 

      Locale localeCN=Locale.CHINA; 

 

      DateFormat df=DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,localeCN); 

 

      System.out.println(df.format(now)); 

 

     //结果为2004年5月17日 星期一 下午16时38分32秒 CST   

 

  }}


******************************************************


时区 java.util.TimeZone


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

import java.util.TimeZone; 

 

  public class a { 

 

    public static void main(String[] args) { 

 

    // 系统时区 

 

    TimeZone timeZoneFL = TimeZone.getDefault(); 

 

    System.out.println("\n" + timeZoneFL.getDisplayName()); 

 

    System.out.println("与GMT相差的微秒数: " + timeZoneFL.getRawOffset()); 

 

    System.out.println("Uses daylight saving: " + timeZoneFL.useDaylightTime()); 

 

    //通过“时区字符串ID”指定时区 

 

    TimeZone timeZoneLondon = TimeZone.getTimeZone("Europe/London"); 

 

    System.out.println("\n" + timeZoneLondon.getDisplayName()); 

 

    System.out.println("与GMT相差的微秒数: " + timeZoneLondon.getRawOffset()); 

 

    System.out.println("采用夏令时: " + timeZoneLondon.useDaylightTime()); 

 

    }}

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


显示结果:


中国标准时间


与GMT相差的微秒数:


Uses daylight saving:false;


格林威治时间


与GMT相差的微秒数:


采用夏令时: true


********************************************************


显示不同时区的时间  df.setTimeZone(TimeZone kkk)


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


public class a { 

 

    public static void main(String[] args) { 

 

      Date now=new Date(); 

 

      DateFormat df=DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL); 

 

      TimeZone timezoneCH=TimeZone.getTimeZone("China/BeiJing"); 

 

      df.setTimeZone(timezoneCH); 

 

      System.out.println("北京时间"+df.format(now)); 

 

      TimeZone timezoneFR=TimeZone.getTimeZone("Europe/Paris"); 

 

      df.setTimeZone(timezoneFR); 

 

      System.out.println("巴黎时间"+df.format(now));     

 

    }}


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


结果如下:


北京时间2004年5月17日 星期一 上午09时31分34秒 GMT


巴黎时间2004年5月17日 星期一 上午11时31分34秒 CEST

标签:java,System,util,println,日期,Date,操作,out
From: https://blog.51cto.com/u_16255870/7534776

相关文章

  • Java验证电子邮箱地址、电话号码
    demo1:/***本类用于处理、检查导入数据的格式*@authorAdministrator*weiwenshuai20110915*/publicclassCheckData{/***验证手机号码、电话号码是否有效*手机号前面加86的情况也考虑*新联通*(中国联通+中国网通)手机号码开头数字130、1......
  • 66基于java的志愿者服务管理系统设计与实现(配套lun文,PPT,可参考做毕业设计)
    本章节给大家带来一个基于java志愿者服务管理系统设计与实现,可适用于校园志愿者活动服务平台,校园爱心志愿者活动,爱心活动管理信息系统,大学志愿者服务平台,大学生志愿者服务平台,大学生爱心活动系统,在线志愿者活动平台,校园志愿者活动,大学志愿者活动平台等等;引言现如今,校园志愿者......
  • MySQL常规优化操作
    查询SQL语句执行频率查询mysql服务启动时长SHOWSTATUSLIKE'uptime';下列输出表示服务启动了276324秒+---------------+--------+|Variable_name|Value|+---------------+--------+|Uptime|276324|+---------------+--------+查询全局SQL执行的频......
  • java将map的key转为大写
    普通的stream流,toMap方法会调用merge方法,该方法如果value传值为null的时候,会报空指针异常,因此直接使用collect()方法进行规约操作publicstaticvoidmain(String[]args){Map<String,String>testMap=newHashMap<>();testMap.put("apple",null);testMap.put("......
  • js 前端 时间日期 月份 日期不满10 前面加0
    法一://获取当前日期的yyyy-MM-dd格式vardate=newDate();varyear=date.getFullYear();varmonth=date.getMonth()+1<10?"0"+(date.getMonth()+1):date.getMonth()+1;varday=date.getDate()<10?"0"+date.getDate():date.get......
  • delphi 操作INI文件
    转载自: delphi读写INI文件_delphi写数据到ini_苏生米沿的博客-CSDN博客Delphi提供了读写INI文件的方法,Delphi操作INI文件最为简洁,这是因为Delphi提供了一个TInifile类,使我们可以非常灵活的处理INI文件。  一、INI文件的结构:;注释[小节名]关键字=值...INI文件允许有多个小节,......
  • 十大排序算法总结及其Java代码实现
    概述基于比较的排序算法,常见的有以下几种算法最好最坏平均空间稳定性思想注意事项冒泡排序O(n)O(n^2)O(n^2)O(1)是比较最好情况需要额外判断选择排序O(n^2)O(n^2)O(n^2)O(1)否比较顺序选择元素,交换次数较多,不适合大规模数据堆排序O(nlogn)O(nlogn)O(nlogn)O(1)否选择需要使用到数据......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......