• 根据jdk帮助文档:

日期和时间模式规定元:

日期和时间格式由日期和时间模式字符串指定。 在日期和时间模式字符串中,从'A''Z'和从'a''z'的非引号的字母被解释为表示日期或时间字符串的组件的模式字母。 可以使用单引号( ' )引用文本,以避免解释。 "''"代表单引号。 所有其他字符不被解释; 在格式化过程中,它们只是复制到输出字符串中,或者在解析过程中与输入字符串匹配。



java Date返回带utc java的date函数_java


 

  • 模式字母通常重复,因为它们的数字确定了准确的表示:
  • Text:对于格式化,如果模式字母的数量是4以上,则使用完整的形式; 否则,如果有的话,使用简短或缩写形式。 对于解析,两种形式都是接受的,与模式字母的数量无关。

     
  • Number:对于格式化,模式字母的数量是最小位数,而较短的数字将零填充到此数量。 对于解析,模式字母的数量将被忽略,除非需要分隔两个相邻的字段。

     
  • Year:如果格式化程序的Calendar是公历,则应用以下规则。
  • 对于格式化,如果模式字母数为2,那么年份将被截断为2位数; 否则被解释为number 。
  • 对于解析,如果模式字母的数量大于2,则年份将按字面解释,而不管数字的数量。 所以使用“MM / dd / yyyy”模式,“01/11/12”解析到公元12年1月11日
  • 为了使用缩写年份模式(“y”或“yy”)进行解析, SimpleDateFormat必须解释相对于某个世纪的缩写年份。 它是通过将日期调整为在创建SimpleDateFormat实例之后的80年之前和20年之后进行的。 例如,使用1997年1月1日创建的“MM / dd / yy”模式和SimpleDateFormat实例,字符串“01/11/12”将被解释为2012年1月11日,而字符串“05/04 / 64“将被解释为1964年5月4日。在解析期间,只有由Character.isDigit(char)定义的两个数字组成的字符串将被解析为默认世纪。 任何其他数字字符串,例如一位数字字符串,三位或三位以上数字字符串,或两位数字字符串(不全部为数字)(例如“-1”),均按字面解释。 所以“01/02/3”或“01/02/003”的解析方式与公元3年1月2日相同。 同样,“01/02 / -3”在公元前4年1月2日被解析。
  • 否则,将应用日历系统特定的表单。 对于格式化和解析两者,如果模式字母数为4以上,则使用特定日历long form 。 否则,使用一个特定日历short or abbreviated form 。

 

一:String->Date,(借助SimpleDateFormat中的parse函数)

示例代码: 

package day_08;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StrtransferDate {
    public static void main(String[] args) throws ParseException {
//        parse()函数,这个函数是SimpleDateFormat的

        String str="2016-06-06 01:02:03";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse(str);
        System.out.println(date);

    }
}

二:Date->String(借助SimpleDateFormat中的format函数)

示例代码: (部分代码来自于:)

public static void main(String[] args) throws ParseException {
//必须明确,SimpleDateFormat只是一个规定格式的作用。
        SimpleDateFormat CeshiFmt1=new SimpleDateFormat("Gyyyy年MM月dd日 HH时mm分ss秒");
        SimpleDateFormat CeshiFmt2=new SimpleDateFormat("yyyy/MM/dd HH:mm"); 
        SimpleDateFormat CeshiFmt3=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat CeshiFmt4=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");
        SimpleDateFormat CeshiFmt5=new SimpleDateFormat("yyyy/MM/dd E"); 
        SimpleDateFormat CeshiFmt6=new SimpleDateFormat(
                "一年中的第 D 天 ,第w个星期 ,一个月中第W个星期 ,k时 z时区");


        Date now=new Date();
        String str1=CeshiFmt1.format(now);   // 规定格式的Date转换为String
        String str2=CeshiFmt2.format(now);
        String str3=CeshiFmt3.format(now);
        String str4=CeshiFmt4.format(now);
        String str5=CeshiFmt5.format(now);
        String str6=CeshiFmt6.format(now);


 }

总结:看着知识点比较碎,但是两个转换就是SimpleDateFormat的对象调用相应的函数(SimpleDateFormat规定好格式),调用函数的参数位置传入待转换的数据,函数的返回值填写目标类型的对象即可。

 

补一个工具类的代码:实现了String和Date的互相转换

//转换工具类代码
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class transfer {
    private transfer(){}  //设置为private,防止创建对象,让其作为工具类
   
    public String DateToString(Date date, String format){
        SimpleDateFormat sdf=new SimpleDateFormat(format);
        String s=sdf.format(date);
        return s;
    }
    
    public Date StringToDate(String str,String format) throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat(format);
        Date date=sdf.parse(str);  //这里得Alt+enter补全throws
    }
}




//测试类代码
package day_08;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class test {
    public static void main(String[] args) throws ParseException {
//     测试date转为String
        Date date=new Date();
    String format="yyyy-MM-dd";
    String str=transfer.DateToString(date,format);
        System.out.println(str);

//        测试String转为Date
        String str1="2000-01-02";
        Date date1=transfer.StringToDate(str1,format);
        System.out.println(date1);

    }
}

结果:

2021-02-02
Sun Jan 02 00:00:00 CST 2000