JAVA 8新特性-03-日時API&Base 64

21721 ワード

JAVA 8新特性-03-日時API&Base 64
JAva 8は、新しいDate-time API(jsr 310)を公開することによって、日付と時間の処理をさらに強化する
旧バージョンのjavaでは、日付時間APIには多くの問題があります.その中には、次のものがあります.
  • 非スレッドセキュリティ-java.util.Dateは非スレッドセキュリティであり、すべての日付クラスが可変であり、java日付からの最大の問題の一つである.
  • 設計が悪い-javaの日付/時間クラスの定義は一致せず、java.utilとjava.sqlのパッケージには日付クラスがあり、フォーマットと解析に使用されるクラスはjava.textパッケージで定義されています.JAva.util.Dateには日付と時間が含まれていますが、java.sql.Dateには日付のみが含まれており、java.sqlパッケージに含めるのは合理的ではありません.また、この2つのクラスには同じ名前がありますが、それ自体が非常に悪いデザインです.
  • タイムゾーンは面倒-日付クラスを処理し、国際化を提供し、タイムゾーンのサポートがないため、javaはjava.utilを導入した.Calendarとjava.util.TimeZoneクラスですが、上記のすべての問題があります.

  • JAva 8はjava.timeパッケージの下に多くの新しいAPIを提供しています.以下に、2つの重要なAPIを示します.
  • Local(ローカル)-タイムゾーンの問題なく、日付時間の処理を簡略化します.
  • Zoned(タイムゾーン)-作成したタイムゾーン処理日時
  • により
    新しいjava.timeには、すべての処理日、時間、日付/時間、タイムゾーン、時刻(instants)、プロシージャ(during)、クロック(clock)の操作が含まれています.
    8.1ローカライズ日時API
    LocalDate/LOcalTimeクラスとLocalDateTimeクラスは、処理時に必要でない場合に使用できます.
    public class Java8Time {
        public static void main(String[] args) {
            Java8Time java8Time = new Java8Time();
            java8Time.testLocalDateTime();
        }
        public void testLocalDateTime() {
            //         
            LocalDateTime currentTime = LocalDateTime.now();
            System.out.println("    :" + currentTime);
    
            //         
            LocalDate date1 = currentTime.toLocalDate();
            System.out.println("date1:" + date1);
    
            //             / / 
            Month month = currentTime.getMonth();
            int day = currentTime.getDayOfMonth();
            int seconds = currentTime.getSecond();
            System.out.println(" :" + month + ", :" + day + ", :" + seconds);
    
            //            
            LocalDateTime date2 = currentTime.withDayOfMonth(20).withYear(2012);
            System.out.println("date2 == " + date2);
    
            //    
            LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12);
            System.out.println("date3 == "+date3);
    
            //    
            LocalTime date4 = LocalTime.of(22, 10);
            System.out.println("date4 == "+date4);
    
            //     
            LocalTime date5 = LocalTime.parse("20:15:30");
            System.out.println("date5 == " + date5);
        }
    }
    

    8.2タイムゾーンの使用日時API
    public class Java8Time1 {
        public static void main(String[] args){
            Java8Time1 java8Time1 = new Java8Time1();
            java8Time1.testZoneDateTime();
        }
        public void testZoneDateTime(){
            //            
            ZonedDateTime date1 = ZonedDateTime.now();
            System.out.println("date1 == "+date1);
    
            //       
            ZoneId zone = date1.getZone();
            System.out.println("zone == " + zone);
    
            //           
            ZoneId zoneId = ZoneId.systemDefault();
            System.out.println("       : " + zoneId);
        }
    }
    

    九、Java 8 Base 64
    Java 8ではBase 64符号化がJavaクラスライブラリの標準となっている.
    JAva 8にはBase 64符号化エンコーダとデコーダが内蔵されています
    Base 64ツールクラスは、以下の3つのBase 64コーデックを取得するための静的方法を提供する.
  • 基本:出力は1組の文字A-Za-z 0-9+/にマッピングされ、符号化は航路標識を追加せず、出力の復号はA-Za-z 0-9+/のみをサポートする.
  • URL:出力は1組の文字A-Za-z 0-9+_にマッピングされ、出力はURLとファイルである.
  • MIME:出力はMIMEフレンドリーフォーマットにマッピングされます.出力は行ごとに76文字を超えず、‘r’を使用して’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
    シーケンス番号
    メソッド名&説明
    1
    static Base 64.Decoder getDecoder()は、ベースベースベースベースbase 64符号化スキームを使用して復号化されるBase 64.Decoder()を返します.
    2
    static Base 64.Encoder getEncoder()は、ベースベースベースベースbase 64符号化スキームを使用して符号化されるBase 64.Encoder()を返します.
    3
    static Base 64.Decoder getMimeDecoder()は、MIME型base 64符号化スキームを用いて復号化されたBase 64.Decoderを返す.
    4
    static Base 64.Encoder getMimeEncoder()は、MIME型base 64符号化スキームを用いて符号化されたBase 64.Encoderを返す.
    5
    static Base 64.Encoder getMimeEncoder(int lineLength,byte[]lineSeparator)は、MIME型base 64符号化スキームを使用して、各行の長さおよび行の区切り記号をパラメータで指定できるBase 64.Encoderを返します.
    6
    static Base 64.Decoder getUrlDecoder()は、URLおよびファイル名セキュリティを使用したbase 64符号化スキームを復号するBase 64.Decoderを返します.
    7
    static Base 64.Encoder getUrlEncoder()は、URLおよびファイル名セキュリティを使用したbase 64符号化スキームを符号化するBase 64.Encoderを返します.
    **注意:**Base 64クラスの多くのメソッドはjava.lang.Objectクラスから継承されます.
    public class Java8Tester {
        public static void main(String args[]) {
            try {
                //       
                String base64encodedString = Base64.getEncoder().encodeToString("runoob?java8".getBytes("utf-8"));
                System.out.println("Base64       (  ) :" + base64encodedString);
                //   
                byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString);
                System.out.println("     : " + new String(base64decodedBytes, "utf-8"));
                base64encodedString = Base64.getUrlEncoder().encodeToString("TutorialsPoint?java8".getBytes("utf-8"));
                System.out.println("Base64       (URL) :" + base64encodedString);
                StringBuilder stringBuilder = new StringBuilder();
                for (int i = 0; i < 10; ++i) {
                    stringBuilder.append(UUID.randomUUID().toString());
                }
                byte[] mimeBytes = stringBuilder.toString().getBytes("utf-8");
                String mimeEncodedString = Base64.getMimeEncoder().encodeToString(mimeBytes);
                System.out.println("Base64       (MIME) :" + mimeEncodedString);
            } catch (UnsupportedEncodingException e) {
                System.out.println("Error :" + e.getMessage());
            }
        }
    }
    

    変換元:https://blog.csdn.net/yitian_66/article/details/81010434