標籤: 網頁設計公司

  • Netty源碼學習系列之3-ServerBootstrap的初始化_網頁設計公司

    Netty源碼學習系列之3-ServerBootstrap的初始化_網頁設計公司

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

    前言

        根據前文我們知道,NioEventLoopGroup和NioEventLoop是netty對Reactor線程模型的實現,而本文要說的ServerBootstrap是對上面二者的整合與調用,是一個統籌者和協調者。具體netty使用的是Reactor單線程模型還是多線程模型、抑或者主從多線程模型,都是ServerBootstrap的不同配置決定的。

        下面照例粘貼一下示例demo(以Reactor多線程模式構建),開始正文。

     1 public class NettyDemo1 {
     2     // netty服務端的一般性寫法
     3     public static void main(String[] args) {
     4         EventLoopGroup boss = new NioEventLoopGroup(1);
     5         EventLoopGroup worker = new NioEventLoopGroup();
     6         try {
     7             ServerBootstrap bootstrap = new ServerBootstrap();
     8             bootstrap.group(boss, worker).channel(NioServerSocketChannel.class)
     9                     .option(ChannelOption.SO_BACKLOG, 100)
    10                     .childHandler(new ChannelInitializer<SocketChannel>() {
    11                         @Override
    12                         protected void initChannel(SocketChannel socketChannel) throws Exception {
    13                             ChannelPipeline pipeline = socketChannel.pipeline();
    14                             pipeline.addLast(new StringDecoder());
    15                             pipeline.addLast(new StringEncoder());
    16                             pipeline.addLast(new NettyServerHandler());
    17                         }
    18                     });
    19             ChannelFuture channelFuture = bootstrap.bind(90);
    20             channelFuture.channel().closeFuture().sync();
    21         } catch (Exception e) {
    22             e.printStackTrace();
    23         } finally {
    24             boss.shutdownGracefully();
    25             worker.shutdownGracefully();
    26         }
    27     }
    28 }

     

    一、ServerBootstrap的初始化

        ServerBootstrap的無參構造器啥都沒做,它使用的build模式給屬性賦值,即上面示例中看到的,每執行一個賦值方法都會返回當前對象的引用使得可以繼續鏈式調用。下面挨個方法追蹤。

    1 public ServerBootstrap() { }

     

    1、ServerBootstrap.group方法

        ServerBootstrap有兩個可用重載group方法(如下的兩個),其中接收一個group入參的方法會調用有兩個入參的group方法,只是兩個參數傳同一個group。這兩個group方法決定了netty使用的Reactor線程模型的類型,一個group入參的方法對應Reactor單線程模型,兩個入參且不是同一個group的方法對應Reactor多線程模型或主從多線程模型(具體是哪一種取決於實例化parentGroup時的線程數)。此處只是提一下,先有個印象,後面會對線程模型進行詳細研究。

    1 public ServerBootstrap group(EventLoopGroup group) {
    2         return group(group, group);
    3     }
    1 public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup) {
    2         super.group(parentGroup);
    3         ObjectUtil.checkNotNull(childGroup, "childGroup");
    4         if (this.childGroup != null) {
    5             throw new IllegalStateException("childGroup set already");
    6         }
    7         this.childGroup = childGroup;
    8         return this;
    9     }

        可以看到上述group方法對兩個入參進行了不同位置的賦值,將第一個參數parentGroup傳給了父類AbstractBootstrap的group方法,如下,即最終賦值給了AbstractBootstrap中的group屬性。第二個參數直接賦值給了ServerBootstrap的childGroup屬性。

    1 public B group(EventLoopGroup group) {
    2         ObjectUtil.checkNotNull(group, "group");
    3         if (this.group != null) {
    4             throw new IllegalStateException("group set already");
    5         }
    6         this.group = group;
    7         return self();
    8     }

     

    2、ServerBootstrap.option/childOption方法和ServerBootstrap.attr/childAttr方法

        這四個方法只是做了屬性的賦值,分別賦值給了AbstractBootstrap的options屬性和attrs屬性以及ServerBootstrap的childOptions屬性和childAttrs屬性。

     1 public <T> B option(ChannelOption<T> option, T value) {
     2         ObjectUtil.checkNotNull(option, "option");
     3         if (value == null) {
     4             synchronized (options) {
     5                 options.remove(option);
     6             }
     7         } else {
     8             synchronized (options) {
     9                 options.put(option, value);
    10             }
    11         }
    12         return self();
    13     }
     1 public <T> B attr(AttributeKey<T> key, T value) {
     2         ObjectUtil.checkNotNull(key, "key");
     3         if (value == null) {
     4             synchronized (attrs) {
     5                 attrs.remove(key);
     6             }
     7         } else {
     8             synchronized (attrs) {
     9                 attrs.put(key, value);
    10             }
    11         }
    12         return self();
    13     }

     

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

    3、ServerBootstrap.channel方法

        調用的是父類AbstractBootstrap的channel方法:

    1 public B channel(Class<? extends C> channelClass) {
    2         return channelFactory(new ReflectiveChannelFactory<C>(
    3                 ObjectUtil.checkNotNull(channelClass, "channelClass")
    4         ));
    5     }

        可以看到先封裝成了一個ReflectiveChannelFactory對象,然後調用channelFactory方法,下面挨個看。ReflectiveChannelFactory的構造器如下,可見就是將傳入class對象的構造器取出來賦值,此時constructor存放的就是NioServerSocketChannel的構造器。

    public ReflectiveChannelFactory(Class<? extends T> clazz) {
            ObjectUtil.checkNotNull(clazz, "clazz");
            try {
                this.constructor = clazz.getConstructor();
            } catch (NoSuchMethodException e) {
                throw new IllegalArgumentException("Class " + StringUtil.simpleClassName(clazz) +
                        " does not have a public non-arg constructor", e);
            }
        }

        channelFactory方法的工作是將上面創建的ReflectiveChannelFactory對象賦值給AbstractBootstrap的channelFactory屬性:

    1 public B channelFactory(ChannelFactory<? extends C> channelFactory) {
    2         ObjectUtil.checkNotNull(channelFactory, "channelFactory");
    3         if (this.channelFactory != null) {
    4             throw new IllegalStateException("channelFactory set already");
    5         }
    6 
    7         this.channelFactory = channelFactory;
    8         return self();
    9     }

     

    4、ServerBootstrap.handler方法和ServerBootstrap.childHandler方法

        handler方法的入參賦值給了AbstractBootstrap的handler屬性,childHandler方法的入參賦值給了ServerBootstrap的childHandler屬性。看到這裏想必園友們也能看出ServerBootstrap的賦值規律了,凡是child開頭的都放在ServerBootstrap中,而不帶child的大多放在其父類ABstractBootstrap中。

    1 public B handler(ChannelHandler handler) {
    2         this.handler = ObjectUtil.checkNotNull(handler, "handler");
    3         return self();
    4     }
    1 public ServerBootstrap childHandler(ChannelHandler childHandler) {
    2         this.childHandler = ObjectUtil.checkNotNull(childHandler, "childHandler");
    3         return this;
    4     }

     

    5、完成賦值后ServerBootstrap的快照圖

     

     

    小結

        ServerBootstrap的初始化過程看起來賦了很多值,但都只是做了準備工作,看起來輕鬆又簡單,但請注意,這是暴風雨前寧靜。前面的各種賦值到底有什麼用處?很多屬性分為有child前綴和沒有child前綴,這樣設置又有什麼意圖?下一期將進入ServerBootstrap的bind方法,這是netty的深水區,很多謎底也將在這裏得到揭曉,敬請期待!

     

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

  • ASP.NET Core MVC+Layui使用EF Core連接MySQL執行簡單的CRUD操作_網頁設計公司

    ASP.NET Core MVC+Layui使用EF Core連接MySQL執行簡單的CRUD操作_網頁設計公司

    ※想知道最厲害的網頁設計公司嚨底家"!

    RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

    前言:

      本章主要通過一個完整的示例講解ASP.NET Core MVC+EF Core對MySQL數據庫進行簡單的CRUD操作,希望能夠為剛入門.NET Core的小夥伴們提供一個完整的參考實例。關於ASP.NET Core MVC+EF操作MsSQL Server詳情請參考官方文檔(https://docs.microsoft.com/zh-cn/aspnet/core/data/ef-mvc/?view=aspnetcore-3.1)。

    示例實現功能預覽:

     博客實例源碼下載地址:

    https://github.com/YSGStudyHards/ASP.NET-Core-MVC-Layui-EF-Core-CRUD_Sample

    一、創建ASP.NET Core Web應用程序:

    注意,本章節主要以APS.NET Core 3.1版本作為博客的樣式實例!

     

    二、添加EF Core NuGet包:

      若要在項目中使用EF Core操作MySQL數據庫,需要安裝相應的數據庫驅動包。 本章教程主要使用 MySQL數據庫,所以我們需要安裝相關驅動包MySql.Data.EntityFrameworkCore。

    安裝方式:

    點擊工具=>NuGet包管理器=>程序包管理器控制台輸入以下命令:

    Install-Package MySql.Data.EntityFrameworkCore -Version 8.0.20

    點擊工具=>NuGet包管理器=>管理解決方案的NuGet程序包:

    搜索:MySql.Data.EntityFrameworkCore  點擊安裝。

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

    三、創建對應數據庫表的實體模型:

       注意該篇博客使用的是手動模型優先的方式進行數據庫表字段與模型屬性映射,當然如果大家覺得這樣子比較麻煩的話可以真正意義上的模型優先,直接創建模型在program.cs中配置創建對應模型的數據庫邏輯代碼即可無需手動創建數據庫,可參考官網文檔教程(https://docs.microsoft.com/zh-cn/aspnet/core/data/ef-rp/intro?view=aspnetcore-3.1&tabs=visual-studio#create-the-database)。

    創建用戶模型(UserInfo):

    注意:屬性大小寫和數據庫中的表字段保持一致,Id 屬性成為此類對應的數據庫表的主鍵列。 默認情況下,EF Core 將名為 Id 或 xxxID 的屬性視為主鍵。 有關詳細信息,請參閱 F Core – 密鑰。

        /// <summary>
        /// 學生信息模型
        /// </summary>
        public class UserInfo
        {
            /// <summary>
            /// 學生編號
            /// </summary>
            [Description("學生編號")]
            public int? Id { get; set; }
    
            /// <summary>
            /// 學生姓名
            /// </summary>
            [Description("學生姓名")]
            public string UserName { get; set; }
    
            /// <summary>
            /// 學生性別
            /// </summary>
            [Description("學生性別")]
            public string Sex { get; set; }
    
            /// <summary>
            /// 學生聯繫電話
            /// </summary>
            [Description("學生聯繫電話")]
            public string Phone { get; set; }
    
            /// <summary>
            /// 學生描述
            /// </summary>
            [Description("學生描述")]
            public string Description { get; set; }
    
            /// <summary>
            /// 學生愛好
            /// </summary>
            [Description("學生愛好")]
            public string Hobby { get; set; }
        }

    四、將數據庫連接字符串添加到 appsettings.json:

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
      "ConnectionStrings": {
            "MySqlConnection":"Data Source=127.0.0.1;User ID=root;Password=root;DataBase=SchoolUserInfo_db"
      }
    }

    五、創建數據庫上下文:

    概述:

     數據庫上下文類是為給定數據模型協調 EF Core 功能的主類。 上下文派生自 Microsoft.EntityFrameworkCore.DbContext。 上下文指定數據模型中包含哪些實體。 在此項目中將數據庫上下文類命名為 SchoolUserInfoContext。

    創建:

    using Microsoft.EntityFrameworkCore;
    using Model;
    
    namespace Dal
    {
        public class SchoolUserInfoContext : DbContext
        {
            public SchoolUserInfoContext(DbContextOptions<SchoolUserInfoContext> options)
                : base(options)
            {
            }
    
            /// <summary>
            /// DbSet實體集屬性對應數據庫中的表(注意實體集名必須與表明一致)
            /// </summary>
            public DbSet<UserInfo> UserInfos { get; set; }
    
            /// <summary>
            /// TODO:當數據庫創建完成后, EF 創建一系列數據表,表名默認和 DbSet 屬性名相同。 集合屬性的名稱一般使用複數形式,但不同的開發人員的命名習慣可能不一樣,
    /// 開發人員根據自己的情況確定是否使用複數形式。 在定義 DbSet 屬性的代碼之後,添加下面代碼,對DbContext指定單數的表名來覆蓋默認的表名。
    /// </summary> /// <param name="modelBuilder"></param> protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<UserInfo>().ToTable("UserInfo"); } } }

    六、將上下文添加到 Startup.cs 中的依賴項注入:

            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                //注入EF Core數據庫上下文服務
                services.AddDbContext<SchoolUserInfoContext>(options =>
                    options.UseMySQL(Configuration.GetConnectionString("MySqlConnection")));
    
                services.AddControllersWithViews();
            }

    七、引入Layui樣式和js:

    前往官網下載Layui相關樣式和js包,下載地址:https://www.layui.com/

    Layui彈出層插件layer.js(有很多地方需要用到彈窗),下載地址:https://layer.layui.com/

    將相關文件存放到wwwroot文件下:

     

    將相關文件引入默認布局頁面中:

    八、 ASP.NET Core MVC 和 EF Core實現MySQL  CRUD功能:

    注意在這裏主要展示的EF Core與數據庫操作的部分代碼,詳細代碼可下載實例源碼查看。

    Create:

            /// <summary>
            /// 學生信息添加
            /// </summary>
            /// <param name="addUserInfo"></param>
            /// <returns></returns>
            public async Task<bool> Create(AddUserInfoViewModel addUserInfo)
            {
                try
                {
                    var userInfo=new UserInfo()
                    {
                        UserName = addUserInfo.UserName,
                        Sex = addUserInfo.Sex,
                        Hobby = addUserInfo.Hobby,
                        Phone = addUserInfo.Phone,
                        Description = addUserInfo.Description
                    };
    
                    _shoSchoolUserInfoContext.UserInfos.Add(userInfo);
    
                    await _shoSchoolUserInfoContext.SaveChangesAsync();
    
                    return true;
                }
                catch
                {
                    return false;
                }
            }

    Retrieve:

            /// <summary>
            /// 獲取用戶信息
            /// </summary>
            /// <param name="page">當前頁碼</param>
            /// <param name="limit">显示條數</param>
            /// <param name="userName">用戶姓名</param>
            /// <returns></returns>
            public async Task<PageSearchModel> GetPageListData(int page = 1, int limit = 15, string userName = "")
            {
                try
                {
                    List<UserInfo> listData;
                    var totalCount = 0;
                    if (!string.IsNullOrWhiteSpace(userName))
                    {
                        listData = await _shoSchoolUserInfoContext.UserInfos.Where(x => x.UserName.Contains(userName)).OrderByDescending(x => x.Id).Skip((page - 1) * limit).Take(limit).ToListAsync();
    
                        totalCount = _shoSchoolUserInfoContext.UserInfos
                            .Count(x => x.UserName.Contains(userName));
                    }
                    else
                    {
                        listData = await _shoSchoolUserInfoContext.UserInfos.OrderByDescending(x => x.Id).Skip((page - 1) * limit).Take(limit).ToListAsync();
    
                        totalCount = _shoSchoolUserInfoContext.UserInfos.Count();
                    }
    
                    return new PageSearchModel()
                    {
                        ResultMsg = "success",
                        Code = 200,
                        TotalCount = totalCount,
                        DataList = listData
                    };
                }
                catch (Exception e)
                {
                    return new PageSearchModel() { Code = 400, ResultMsg = e.Message };
                }
            }

    Update:

            /// <summary>
            /// 學生信息修改
            /// </summary>
            /// <param name="userInfo"></param>
            /// <returns></returns>
            public async Task<bool> Update(UserInfo userInfo)
            {
    
                try
                {
                    _shoSchoolUserInfoContext.UserInfos.Update(userInfo);
    
                    await _shoSchoolUserInfoContext.SaveChangesAsync();
    
                    return true;
                }
                catch
                {
                    return false;
                }
            }

    Delete:

            /// <summary>
            /// 學生信息刪除
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            public async Task<bool> Delete(int? id)
            {
                try
                {
                    var searchUserInfo = await _shoSchoolUserInfoContext.UserInfos.FindAsync(id);
    
                    if (searchUserInfo == null)
                    {
                        return false;
                    }
    
                    _shoSchoolUserInfoContext.UserInfos.Remove(searchUserInfo);
                    await _shoSchoolUserInfoContext.SaveChangesAsync();
    
                    return true;
                }
                catch
                {
                    return false;
                }
            }

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

  • 【Java8新特性】關於Java8中的日期時間API,你需要掌握這些!!_網頁設計公司

    【Java8新特性】關於Java8中的日期時間API,你需要掌握這些!!_網頁設計公司

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

    寫在前面

    Java8之前的日期和時間API,存在一些問題,比如:線程安全的問題,跨年的問題等等。這些問題都在Hava8中的日期和時間API中得到了解決,而且Java8中的日期和時間API更加強大。立志成為架構師的你,必須掌握Java8中的日期和時間API。

    本地時間和時間戳

    主要方法:

    • now:靜態方法,根據當前時間創建對象
    • of:靜態方法,根據指定日期/時間創建對象
    • plusDays,plusWeeks,plusMonths,plusYears:向當前LocalDate 對象添加幾天、幾周、幾個月、幾年
    • minusDays,minusWeeks,minusMonths,minusYears:從當前LocalDate 對象減去幾天、幾周、幾個月、幾年
    • plus,minus:添加或減少一個Duration 或Period
    • withDayOfMonth,withDayOfYear,withMonth,withYear:將月份天數、年份天數、月份、年份修改為指定的值並返回新的LocalDate 對象
    • getDayOfYear:獲得年份天數(1~366)
    • getDayOfWeek:獲得星期幾(返回一個DayOfWeek枚舉值)
    • getMonth:獲得月份, 返回一個Month 枚舉值
    • getMonthValue:獲得月份(1~12)
    • getYear:獲得年份
    • until:獲得兩個日期之間的Period 對象,或者指定ChronoUnits 的数字
    • isBefore,isAfter:比較兩個LocalDate
    • isLeapYear:判斷是否是閏年

    使用 LocalDate、 LocalTime、 LocalDateTime

    LocalDate、 LocalTime、 LocalDateTime 類的實例是不可變的對象,分別表示使用 ISO-8601日曆系統的日期、時間、日期和時間。它們提供了簡單的日期或時間,並不包含當前的時間信息。也不包含與時區相關的信息。

    注: ISO-8601日曆系統是國際標準化組織制定的現代公民的日期和時間的表示法

    方法 描述 示例
    now() 靜態方法,根據當前時間創建對象 LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); LocalDateTime localDateTime = LocalDateTime.now();
    of() 靜態方法,根據指定日期/時間創建 對象 LocalDate localDate = LocalDate.of(2016, 10, 26); LocalTime localTime = LocalTime.of(02, 22, 56); LocalDateTime localDateTime = LocalDateTime.of(2016, 10, 26, 12, 10, 55);
    plusDays, plusWeeks, plusMonths, plusYears 向當前 LocalDate 對象添加幾天、 幾周、 幾個月、 幾年
    minusDays, minusWeeks, minusMonths, minusYears 從當前 LocalDate 對象減去幾天、 幾周、 幾個月、 幾年
    plus, minus 添加或減少一個 Duration 或 Period
    withDayOfMonth, withDayOfYear, withMonth, withYear 將月份天數、 年份天數、 月份、 年 份 修 改 為 指 定 的 值 並 返 回 新 的 LocalDate 對象
    getDayOfMonth 獲得月份天數(1-31)
    getDayOfYear 獲得年份天數(1-366)
    getDayOfWeek 獲得星期幾(返回一個 DayOfWeek 枚舉值)
    getMonth 獲得月份, 返回一個 Month 枚舉值
    getMonthValue 獲得月份(1-12)
    getYear 獲得年份
    until 獲得兩個日期之間的 Period 對象, 或者指定 ChronoUnits 的数字
    isBefore, isAfter 比較兩個 LocalDate
    isLeapYear 判斷是否是閏年

    示例代碼如下所示。

    // 獲取當前系統時間
    LocalDateTime localDateTime1 = LocalDateTime.now();
    System.out.println(localDateTime1);
    // 運行結果:2019-10-27T13:49:09.483
    
    // 指定日期時間
    LocalDateTime localDateTime2 = LocalDateTime.of(2019, 10, 27, 13, 45,10);
    System.out.println(localDateTime2);
    // 運行結果:2019-10-27T13:45:10
    
    LocalDateTime localDateTime3 = localDateTime1
            // 加三年
            .plusYears(3)
            // 減三個月
            .minusMonths(3);
    System.out.println(localDateTime3);
    // 運行結果:2022-07-27T13:49:09.483
    
    System.out.println(localDateTime1.getYear());       // 運行結果:2019
    System.out.println(localDateTime1.getMonthValue()); // 運行結果:10
    System.out.println(localDateTime1.getDayOfMonth()); // 運行結果:27
    System.out.println(localDateTime1.getHour());       // 運行結果:13
    System.out.println(localDateTime1.getMinute());     // 運行結果:52
    System.out.println(localDateTime1.getSecond());     // 運行結果:6
    
    LocalDateTime localDateTime4 = LocalDateTime.now();
    System.out.println(localDateTime4);     // 2019-10-27T14:19:56.884
    LocalDateTime localDateTime5 = localDateTime4.withDayOfMonth(10);
    System.out.println(localDateTime5);     // 2019-10-10T14:19:56.884
    

    Instant 時間戳

    用於“時間戳”的運算。它是以Unix元年(傳統的設定為UTC時區1970年1月1日午夜時分)開始所經歷的描述進行運算 。

    示例代碼如下所示。

    Instant instant1 = Instant.now();    // 默認獲取UTC時區
    System.out.println(instant1);
    // 運行結果:2019-10-27T05:59:58.221Z
    
    // 偏移量運算
    OffsetDateTime offsetDateTime = instant1.atOffset(ZoneOffset.ofHours(8));
    System.out.println(offsetDateTime);
    // 運行結果:2019-10-27T13:59:58.221+08:00
    
    // 獲取時間戳
    System.out.println(instant1.toEpochMilli());
    // 運行結果:1572156145000
    
    // 以Unix元年為起點,進行偏移量運算
    Instant instant2 = Instant.ofEpochSecond(60);
    System.out.println(instant2);
    // 運行結果:1970-01-01T00:01:00Z
    

    Duration 和 Period

    Duration:用於計算兩個“時間”間隔。

    Period:用於計算兩個“日期”間隔 。

    Instant instant_1 = Instant.now();
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    Instant instant_2 = Instant.now();
    
    Duration duration = Duration.between(instant_1, instant_2);
    System.out.println(duration.toMillis());
    // 運行結果:1000
    
    LocalTime localTime_1 = LocalTime.now();
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    LocalTime localTime_2 = LocalTime.now();
    
    System.out.println(Duration.between(localTime_1, localTime_2).toMillis());
    // 運行結果:1000
    
    LocalDate localDate_1 = LocalDate.of(2018,9, 9);
    LocalDate localDate_2 = LocalDate.now();
    
    Period period = Period.between(localDate_1, localDate_2);
    System.out.println(period.getYears());      // 運行結果:1
    System.out.println(period.getMonths());     // 運行結果:1
    System.out.println(period.getDays());       // 運行結果:18
    

    日期的操縱

    TemporalAdjuster : 時間校正器。有時我們可能需要獲取例如:將日期調整到“下個周日”等操作。

    TemporalAdjusters : 該類通過靜態方法提供了大量的常用 TemporalAdjuster 的實現。

    南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

    搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

    例如獲取下個周日,如下所示:

    LocalDate nextSunday = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
    

    完整的示例代碼如下所示。

    LocalDateTime localDateTime1 = LocalDateTime.now();
    System.out.println(localDateTime1);     // 2019-10-27T14:19:56.884
    
    // 獲取這個第一天的日期
    System.out.println(localDateTime1.with(TemporalAdjusters.firstDayOfMonth()));            // 2019-10-01T14:22:58.574
    // 獲取下個周末的日期
    System.out.println(localDateTime1.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)));       // 2019-11-03T14:22:58.574
    
    // 自定義:下一個工作日
    LocalDateTime localDateTime2 = localDateTime1.with(l -> {
        LocalDateTime localDateTime = (LocalDateTime) l;
        DayOfWeek dayOfWeek =  localDateTime.getDayOfWeek();
    
        if (dayOfWeek.equals(DayOfWeek.FRIDAY)) {
           return localDateTime.plusDays(3);
        } else if (dayOfWeek.equals(DayOfWeek.SATURDAY)) {
           return localDateTime.plusDays(2);
        } else {
           return localDateTime.plusDays(1);
        }
    });
    System.out.println(localDateTime2);
    // 運行結果:2019-10-28T14:30:17.400
    

    解析與格式化

    java.time.format.DateTimeFormatter 類:該類提供了三種格式化方法:

    • 預定義的標準格式
    • 語言環境相關的格式
    • 自定義的格式

    示例代碼如下所示。

    DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ISO_DATE;
    LocalDateTime localDateTime = LocalDateTime.now();
    String strDate1 = localDateTime.format(dateTimeFormatter1);
    System.out.println(strDate1);
    // 運行結果:2019-10-27
    
    // Date -> String
    DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd  HH:mm:ss");
    String strDate2 = dateTimeFormatter2.format(localDateTime);
    System.out.println(strDate2);
    // 運行結果:2019-10-27  14:36:11
    
    // String -> Date
    LocalDateTime localDateTime1 = localDateTime.parse(strDate2, dateTimeFormatter2);
    System.out.println(localDateTime1);
    // 運行結果:2019-10-27T14:37:39
    

    時區的處理

    Java8 中加入了對時區的支持,帶時區的時間為分別為:ZonedDate、 ZonedTime、 ZonedDateTime。

    其中每個時區都對應着 ID,地區ID都為 “{區域}/{城市}”的格式,例如 : Asia/Shanghai 等。

    • ZoneId:該類中包含了所有的時區信息
    • getAvailableZoneIds() : 可以獲取所有時區時區信息
    • of(id) : 用指定的時區信息獲取 ZoneId 對象

    示例代碼如下所示。

    // 獲取所有的時區
    Set<String> set = ZoneId.getAvailableZoneIds();
    System.out.println(set);
    // [Asia/Aden, America/Cuiaba, Etc/GMT+9, Etc/GMT+8, Africa/Nairobi, America/Marigot, Asia/Aqtau, Pacific/Kwajalein, America/El_Salvador, Asia/Pontianak, Africa/Cairo, Pacific/Pago_Pago, Africa/Mbabane, Asia/Kuching, Pacific/Honolulu, Pacific/Rarotonga, America/Guatemala, Australia/Hobart, Europe/London, America/Belize, America/Panama, Asia/Chungking, America/Managua, America/Indiana/Petersburg, Asia/Yerevan, Europe/Brussels, GMT, Europe/Warsaw, America/Chicago, Asia/Kashgar, Chile/Continental, Pacific/Yap, CET, Etc/GMT-1, Etc/GMT-0, Europe/Jersey, America/Tegucigalpa, Etc/GMT-5, Europe/Istanbul, America/Eirunepe, Etc/GMT-4, America/Miquelon, Etc/GMT-3, Europe/Luxembourg, Etc/GMT-2, Etc/GMT-9, America/Argentina/Catamarca, Etc/GMT-8, Etc/GMT-7, Etc/GMT-6, Europe/Zaporozhye, Canada/Yukon, Canada/Atlantic, Atlantic/St_Helena, Australia/Tasmania, Libya, Europe/Guernsey, America/Grand_Turk, US/Pacific-New, Asia/Samarkand, America/Argentina/Cordoba, Asia/Phnom_Penh, Africa/Kigali, Asia/Almaty, US/Alaska, Asia/Dubai, Europe/Isle_of_Man, America/Araguaina, Cuba, Asia/Novosibirsk, America/Argentina/Salta, Etc/GMT+3, Africa/Tunis, Etc/GMT+2, Etc/GMT+1, Pacific/Fakaofo, Africa/Tripoli, Etc/GMT+0, Israel, Africa/Banjul, Etc/GMT+7, Indian/Comoro, Etc/GMT+6, Etc/GMT+5, Etc/GMT+4, Pacific/Port_Moresby, US/Arizona, Antarctica/Syowa, Indian/Reunion, Pacific/Palau, Europe/Kaliningrad, America/Montevideo, Africa/Windhoek, Asia/Karachi, Africa/Mogadishu, Australia/Perth, Brazil/East, Etc/GMT, Asia/Chita, Pacific/Easter, Antarctica/Davis, Antarctica/McMurdo, Asia/Macao, America/Manaus, Africa/Freetown, Europe/Bucharest, Asia/Tomsk, America/Argentina/Mendoza, Asia/Macau, Europe/Malta, Mexico/BajaSur, Pacific/Tahiti, Africa/Asmera, Europe/Busingen, America/Argentina/Rio_Gallegos, Africa/Malabo, Europe/Skopje, America/Catamarca, America/Godthab, Europe/Sarajevo, Australia/ACT, GB-Eire, Africa/Lagos, America/Cordoba, Europe/Rome, Asia/Dacca, Indian/Mauritius, Pacific/Samoa, America/Regina, America/Fort_Wayne, America/Dawson_Creek, Africa/Algiers, Europe/Mariehamn, America/St_Johns, America/St_Thomas, Europe/Zurich, America/Anguilla, Asia/Dili, America/Denver, Africa/Bamako, Europe/Saratov, GB, Mexico/General, Pacific/Wallis, Europe/Gibraltar, Africa/Conakry, Africa/Lubumbashi, Asia/Istanbul, America/Havana, NZ-CHAT, Asia/Choibalsan, America/Porto_Acre, Asia/Omsk, Europe/Vaduz, US/Michigan, Asia/Dhaka, America/Barbados, Europe/Tiraspol, Atlantic/Cape_Verde, Asia/Yekaterinburg, America/Louisville, Pacific/Johnston, Pacific/Chatham, Europe/Ljubljana, America/Sao_Paulo, Asia/Jayapura, America/Curacao, Asia/Dushanbe, America/Guyana, America/Guayaquil, America/Martinique, Portugal, Europe/Berlin, Europe/Moscow, Europe/Chisinau, America/Puerto_Rico, America/Rankin_Inlet, Pacific/Ponape, Europe/Stockholm, Europe/Budapest, America/Argentina/Jujuy, Australia/Eucla, Asia/Shanghai, Universal, Europe/Zagreb, America/Port_of_Spain, Europe/Helsinki, Asia/Beirut, Asia/Tel_Aviv, Pacific/Bougainville, US/Central, Africa/Sao_Tome, Indian/Chagos, America/Cayenne, Asia/Yakutsk, Pacific/Galapagos, Australia/North, Europe/Paris, Africa/Ndjamena, Pacific/Fiji, America/Rainy_River, Indian/Maldives, Australia/Yancowinna, SystemV/AST4, Asia/Oral, America/Yellowknife, Pacific/Enderbury, America/Juneau, Australia/Victoria, America/Indiana/Vevay, Asia/Tashkent, Asia/Jakarta, Africa/Ceuta, Asia/Barnaul, America/Recife, America/Buenos_Aires, America/Noronha, America/Swift_Current, Australia/Adelaide, America/Metlakatla, Africa/Djibouti, America/Paramaribo, Europe/Simferopol, Europe/Sofia, Africa/Nouakchott, Europe/Prague, America/Indiana/Vincennes, Antarctica/Mawson, America/Kralendijk, Antarctica/Troll, Europe/Samara, Indian/Christmas, America/Antigua, Pacific/Gambier, America/Indianapolis, America/Inuvik, America/Iqaluit, Pacific/Funafuti, UTC, Antarctica/Macquarie, Canada/Pacific, America/Moncton, Africa/Gaborone, Pacific/Chuuk, Asia/Pyongyang, America/St_Vincent, Asia/Gaza, Etc/Universal, PST8PDT, Atlantic/Faeroe, Asia/Qyzylorda, Canada/Newfoundland, America/Kentucky/Louisville, America/Yakutat, Asia/Ho_Chi_Minh, Antarctica/Casey, Europe/Copenhagen, Africa/Asmara, Atlantic/Azores, Europe/Vienna, ROK, Pacific/Pitcairn, America/Mazatlan, Australia/Queensland, Pacific/Nauru, Europe/Tirane, Asia/Kolkata, SystemV/MST7, Australia/Canberra, MET, Australia/Broken_Hill, Europe/Riga, America/Dominica, Africa/Abidjan, America/Mendoza, America/Santarem, Kwajalein, America/Asuncion, Asia/Ulan_Bator, NZ, America/Boise, Australia/Currie, EST5EDT, Pacific/Guam, Pacific/Wake, Atlantic/Bermuda, America/Costa_Rica, America/Dawson, Asia/Chongqing, Eire, Europe/Amsterdam, America/Indiana/Knox, America/North_Dakota/Beulah, Africa/Accra, Atlantic/Faroe, Mexico/BajaNorte, America/Maceio, Etc/UCT, Pacific/Apia, GMT0, America/Atka, Pacific/Niue, Australia/Lord_Howe, Europe/Dublin, Pacific/Truk, MST7MDT, America/Monterrey, America/Nassau, America/Jamaica, Asia/Bishkek, America/Atikokan, Atlantic/Stanley, Australia/NSW, US/Hawaii, SystemV/CST6, Indian/Mahe, Asia/Aqtobe, America/Sitka, Asia/Vladivostok, Africa/Libreville, Africa/Maputo, Zulu, America/Kentucky/Monticello, Africa/El_Aaiun, Africa/Ouagadougou, America/Coral_Harbour, Pacific/Marquesas, Brazil/West, America/Aruba, America/North_Dakota/Center, America/Cayman, Asia/Ulaanbaatar, Asia/Baghdad, Europe/San_Marino, America/Indiana/Tell_City, America/Tijuana, Pacific/Saipan, SystemV/YST9, Africa/Douala, America/Chihuahua, America/Ojinaga, Asia/Hovd, America/Anchorage, Chile/EasterIsland, America/Halifax, Antarctica/Rothera, America/Indiana/Indianapolis, US/Mountain, Asia/Damascus, America/Argentina/San_Luis, America/Santiago, Asia/Baku, America/Argentina/Ushuaia, Atlantic/Reykjavik, Africa/Brazzaville, Africa/Porto-Novo, America/La_Paz, Antarctica/DumontDUrville, Asia/Taipei, Antarctica/South_Pole, Asia/Manila, Asia/Bangkok, Africa/Dar_es_Salaam, Poland, Atlantic/Madeira, Antarctica/Palmer, America/Thunder_Bay, Africa/Addis_Ababa, Asia/Yangon, Europe/Uzhgorod, Brazil/DeNoronha, Asia/Ashkhabad, Etc/Zulu, America/Indiana/Marengo, America/Creston, America/Punta_Arenas, America/Mexico_City, Antarctica/Vostok, Asia/Jerusalem, Europe/Andorra, US/Samoa, PRC, Asia/Vientiane, Pacific/Kiritimati, America/Matamoros, America/Blanc-Sablon, Asia/Riyadh, Iceland, Pacific/Pohnpei, Asia/Ujung_Pandang, Atlantic/South_Georgia, Europe/Lisbon, Asia/Harbin, Europe/Oslo, Asia/Novokuznetsk, CST6CDT, Atlantic/Canary, America/Knox_IN, Asia/Kuwait, SystemV/HST10, Pacific/Efate, Africa/Lome, America/Bogota, America/Menominee, America/Adak, Pacific/Norfolk, Europe/Kirov, America/Resolute, Pacific/Tarawa, Africa/Kampala, Asia/Krasnoyarsk, Greenwich, SystemV/EST5, America/Edmonton, Europe/Podgorica, Australia/South, Canada/Central, Africa/Bujumbura, America/Santo_Domingo, US/Eastern, Europe/Minsk, Pacific/Auckland, Africa/Casablanca, America/Glace_Bay, Canada/Eastern, Asia/Qatar, Europe/Kiev, Singapore, Asia/Magadan, SystemV/PST8, America/Port-au-Prince, Europe/Belfast, America/St_Barthelemy, Asia/Ashgabat, Africa/Luanda, America/Nipigon, Atlantic/Jan_Mayen, Brazil/Acre, Asia/Muscat, Asia/Bahrain, Europe/Vilnius, America/Fortaleza, Etc/GMT0, US/East-Indiana, America/Hermosillo, America/Cancun, Africa/Maseru, Pacific/Kosrae, Africa/Kinshasa, Asia/Kathmandu, Asia/Seoul, Australia/Sydney, America/Lima, Australia/LHI, America/St_Lucia, Europe/Madrid, America/Bahia_Banderas, America/Montserrat, Asia/Brunei, America/Santa_Isabel, Canada/Mountain, America/Cambridge_Bay, Asia/Colombo, Australia/West, Indian/Antananarivo, Australia/Brisbane, Indian/Mayotte, US/Indiana-Starke, Asia/Urumqi, US/Aleutian, Europe/Volgograd, America/Lower_Princes, America/Vancouver, Africa/Blantyre, America/Rio_Branco, America/Danmarkshavn, America/Detroit, America/Thule, Africa/Lusaka, Asia/Hong_Kong, Iran, America/Argentina/La_Rioja, Africa/Dakar, SystemV/CST6CDT, America/Tortola, America/Porto_Velho, Asia/Sakhalin, Etc/GMT+10, America/Scoresbysund, Asia/Kamchatka, Asia/Thimbu, Africa/Harare, Etc/GMT+12, Etc/GMT+11, Navajo, America/Nome, Europe/Tallinn, Turkey, Africa/Khartoum, Africa/Johannesburg, Africa/Bangui, Europe/Belgrade, Jamaica, Africa/Bissau, Asia/Tehran, WET, Europe/Astrakhan, Africa/Juba, America/Campo_Grande, America/Belem, Etc/Greenwich, Asia/Saigon, America/Ensenada, Pacific/Midway, America/Jujuy, Africa/Timbuktu, America/Bahia, America/Goose_Bay, America/Virgin, America/Pangnirtung, Asia/Katmandu, America/Phoenix, Africa/Niamey, America/Whitehorse, Pacific/Noumea, Asia/Tbilisi, America/Montreal, Asia/Makassar, America/Argentina/San_Juan, Hongkong, UCT, Asia/Nicosia, America/Indiana/Winamac, SystemV/MST7MDT, America/Argentina/ComodRivadavia, America/Boa_Vista, America/Grenada, Asia/Atyrau, Australia/Darwin, Asia/Khandyga, Asia/Kuala_Lumpur, Asia/Famagusta, Asia/Thimphu, Asia/Rangoon, Europe/Bratislava, Asia/Calcutta, America/Argentina/Tucuman, Asia/Kabul, Indian/Cocos, Japan, Pacific/Tongatapu, America/New_York, Etc/GMT-12, Etc/GMT-11, Etc/GMT-10, SystemV/YST9YDT, Europe/Ulyanovsk, Etc/GMT-14, Etc/GMT-13, W-SU, America/Merida, EET, America/Rosario, Canada/Saskatchewan, America/St_Kitts, Arctic/Longyearbyen, America/Fort_Nelson, America/Caracas, America/Guadeloupe, Asia/Hebron, Indian/Kerguelen, SystemV/PST8PDT, Africa/Monrovia, Asia/Ust-Nera, Egypt, Asia/Srednekolymsk, America/North_Dakota/New_Salem, Asia/Anadyr, Australia/Melbourne, Asia/Irkutsk, America/Shiprock, America/Winnipeg, Europe/Vatican, Asia/Amman, Etc/UTC, SystemV/AST4ADT, Asia/Tokyo, America/Toronto, Asia/Singapore, Australia/Lindeman, America/Los_Angeles, SystemV/EST5EDT, Pacific/Majuro, America/Argentina/Buenos_Aires, Europe/Nicosia, Pacific/Guadalcanal, Europe/Athens, US/Pacific, Europe/Monaco]
    
    // 通過時區構建LocalDateTime
    LocalDateTime localDateTime1 = LocalDateTime.now(ZoneId.of("America/El_Salvador"));
    System.out.println(localDateTime1);
    // 2019-10-27T00:46:21.268
    
    // 以時區格式显示時間
    LocalDateTime localDateTime2 = LocalDateTime.now();
    ZonedDateTime zonedDateTime1 = localDateTime2.atZone(ZoneId.of("Africa/Nairobi"));
    System.out.println(zonedDateTime1);
    // 2019-10-27T14:46:21.273+03:00[Africa/Nairobi]
    

    與傳統日期處理的轉換

    寫在最後

    如果覺得文章對你有點幫助,請微信搜索並關注「 冰河技術 」微信公眾號,跟冰河學習Java8新特性。

    最後,附上Java8新特性核心知識圖,祝大家在學習Java8新特性時少走彎路。

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    ※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

    節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

  • 解讀四大亮點——這輛車帶你尊享貴賓禮遇_網頁設計公司

    解讀四大亮點——這輛車帶你尊享貴賓禮遇_網頁設計公司

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

    2。異地維修享7天五星級酒店住宿權而當車輛在異地發生事故需要長時間維修時,沃爾沃、捷豹路虎和謳歌三大品牌會提供5星級酒店客房,免費供房的天數3-5天不等。奔馳、寶馬也不落後,都有這一服務,但免費住宿的標準稍低,為四星級酒店。

    10月21日,萬眾矚目的上汽大眾pHIDEON 輝昂在中國第一高樓——上海中心正式上市。當晚,pHIDEON輝昂上市的消息就迅速登上了各大汽車媒體的頭條。但當各大媒體都把焦點放在售價上的同時,卻忽略了另一個重點,那就是與售價同時公布的針對輝昂車主專屬的“尊享權益”。這些權益到底能讓車主得到什麼密切的利益呢?小編就在這裏整理了四條和車主密切相關的權益,並利用数字來做進一步解讀。

    亮點一:

    最高4年/12萬公里質量擔保服務和全程無憂免費保養

    長久以來,與豪華品牌車型價格“相配”的高昂保養費用,讓很多准車主們望而卻步。而這次輝昂針對其車主推出的專屬“尊享權益”。在眾多的尊享權益中,最讓人驚喜的是上汽大眾針對所有輝昂車主推出的質量擔保期內,所有保養手冊上列明的保養項目全都執行免費保養政策。而說到質量擔保期,除了入門款的車型按照國家規定提供3年10萬公里的常規質量擔保,其他7款車型,均可享受到廠家額外贈送的1年/2萬公里延長質量擔保期的服務,也就是說御尊豪華版及以上車型可享受4年/12萬公里質量擔保服務和免費保養。這一舉措不僅显示了對其自身產品的自信,而且真心誠意為消費者減輕用車養車的成本。為了能直觀表現這一免費政策,我們計算一下,傳統德系三強BBA車型,它們的保養費用到底為多少?通過對比保養費用,就能發現,這一權益能為輝昂車主省了多少後期養車費用。

    與高配車型車主對保養數據不敏感相比,低配車主對於車輛保養這事兒還是比較在乎的,上述表格數據對應車型分別為:E200L運動型、A6L TFSI技術型、520Li典雅型。可以看出,除了奧迪贈送首保之外,奔馳和寶馬車主均不能享此項優惠。它們行駛6萬公里后的保養費用總額分別為12,468元、17,280.76元和14,586元。隨着車況的下降,行駛12萬公里的車輛保養費用,不只是簡單的翻倍而已。

    除了保養方面輝昂車主可以節省一大筆支出外,輝昂的延保也是誠意十足。輝昂御尊版車型提供3年10萬公里質保的前提下,剩餘的7款車型均為4年12萬公里質保服務,

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

    等於是廠家額外提供了1年/2萬公里的免費延保服務。而BBA方面,因為沒有官方的延保政策可循,媒體通過走訪多家4S店的形式,發現他們的一年延保費用大致都在5,000元左右,而這樣直觀的對比,表明了上汽大眾對輝昂車主足夠“大方”;更可看做輝昂車主在行駛12萬公里的過程中,僅需支付日常的油費和保險開銷,其他費用幾乎為零。

    亮點二:

    專屬品牌保險權益驚喜頗多

    既然提到了保險,我們也來說一下輝昂的品牌保險權益。從本次公布的信息中不難發現,購買輝昂品牌車險的上汽大眾輝昂車主不但可以享受到不限里程不限次數的事故現場緊急維修救援服務,還能享受2人國內15天旅行的額外保障服務和事故維修期間的出行補償。小編就維修期補償這一權益,為大家做一下全面解析:

    1.本地維修享7天(最高300元/天)打車報銷

    有豪華車消費者反映,與豪華車銷售保持增長趨勢不同的是,豪華車的售後服務並無多大改善。比如說當車輛出現故障需要較長時間維修時,寶馬、雷克薩斯不會為車主提供任何權益;其他豪華品牌通常是調配經銷商處的試駕車給車主臨時使用。雖說這樣做也是出於給車主解決困難的目的,但並沒有考慮到如果車主對車輛性能並不了解,就會存在安全隱患。

    上汽大眾在這一點上則顯得更為細心,如果輝昂在本地出現維修情況,車主即可享受7天打車費報銷權益,每天最高300元。這樣一來,既不會存在因對試駕車性能不熟悉引發意外事故的隱患,還可以在一周時間里依舊享受着便捷的有車生活,省時省心、無後顧之憂。

    2.異地維修享7天五星級酒店住宿權

    而當車輛在異地發生事故需要長時間維修時,沃爾沃、捷豹路虎和謳歌三大品牌會提供5星級酒店客房,免費供房的天數3-5天不等。奔馳、寶馬也不落後,都有這一服務,但免費住宿的標準稍低,為四星級酒店。豪華品牌中唯有奧迪不提供這一服務。

    上汽大眾雖然是進軍豪華轎車市場的後來者,在異地住宿服務上反倒是表現得最有誠意。假如pHIDEON 輝昂出現異地維修情況,車主即可享受最長7天入住五星級酒店的住宿權益。以北上廣知名的幾家五星級酒店為例,平均算下來,7天房費至少有9205元。這可是一筆不小的開銷,上汽大眾願意出這份錢,既是對車主身在異地等待修車焦慮心情的撫慰,亦能使車主無論身在何處都能享受到貴賓級的尊榮體驗。

    亮點三:

    首付低至30% 兩年零利率信貸優本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

  • 為什麼10年車齡的超低價二手車不能買?其中有貓膩嗎_網頁設計公司

    為什麼10年車齡的超低價二手車不能買?其中有貓膩嗎_網頁設計公司

    ※想知道最厲害的網頁設計公司嚨底家"!

    RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

    不過在三年後售出時,殘值率下降就會迅猛不少,所以要看準時機將其售出。壯年時期II (3-6年,里程在16萬公里左右)此時的車輛狀況已經下降不少,各方面開始出現故障,也有着更多的零部件需要更換,發動機以及變速箱性能也開始逐漸下降,油耗會稍微上升一些,底盤零件由其是橡膠件基本都需要更換,此時維修保養費用是大幅度上升,但發動機變速箱方面大體上還是能保持未拆解的狀況,總的來說雖然動力油耗開始下降,但依然是處於可以接受的範圍。

    前言

    在筆者認為,汽車並不是一件將你從A點送到B點的工具,而是一個鮮活的生命,有着自己獨特的個性,並且和我們人類一樣有着壽命,也會經歷像嬰兒到老人一樣的時期。而今天筆者就要給大家介紹一下汽車使用的幾個周期,希望能給到想要購入二手車的用戶一些幫助。

    准新車階段(0-1年車齡,里程少於2萬公里)

    一輛車只要是小於或等於1年車齡,又或者是行駛里程是低於兩萬公里,我們都可以將其視作準新車,此時的它有着幾近最好的車況,各方面部件以及性能都可以說是處於嶄新的階段。只是可能還處於磨合期中,各部件可能配合不協調,會有着剎車異響、發動機比較嘈雜等小問題發生,此階段的車輛除了常規的更換油液以外是不會產生額外的使用費用,而且油耗也相對的低,是使用成本最低的階段。

    對於二手車來說,買這樣的二手車是相當於買新車,殘值率還是較高的所以在價格上也是比較堅挺,總體價格往往和車身價相差無幾,僅僅是相差了一個購置稅以及保險的價格。若是能找到較好的車源以及能接受二手車,這種准新車是不錯的選擇。但是在幾年後再次出售的時候,價格就會因為已經過了一次戶而稍微低一點。

    壯年階段 I(1-3年,里程在8萬公里以下)

    這個階段的車輛是有着最好的性能,因為經過了磨合期的洗禮,各方面部件已經配合合拍,是使用最為舒心的時候,並不需要像磨合期時那麼多顧忌以及因為一些小問題而苦惱,而且動力油耗水平也幾乎是最為好的時期,正正因為配合合拍了,發動機以及變速箱之間的摩擦反而減少了,油耗也自然而然地小許下降。不過這個時候就是開始要更換一些易損件了,例如剎車油、剎車片、火花塞、輪胎等,

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

    這樣就免不了增加一些花銷。

    購買這個時期的二手車是整個二手車周期中最為划算的階段,雖然殘值率下降還是比較慢,售價並不會如後面階段下降那麼快,但是憑着較低的維修保養成本以及油耗使得它使用費用也相對的低廉。不過在三年後售出時,殘值率下降就會迅猛不少,所以要看準時機將其售出。

    壯年時期II (3-6年,里程在16萬公里左右)

    此時的車輛狀況已經下降不少,各方面開始出現故障,也有着更多的零部件需要更換,發動機以及變速箱性能也開始逐漸下降,油耗會稍微上升一些,底盤零件由其是橡膠件基本都需要更換,此時維修保養費用是大幅度上升,但發動機變速箱方面大體上還是能保持未拆解的狀況,總的來說雖然動力油耗開始下降,但依然是處於可以接受的範圍。

    這個時期的二手車在殘值率上表現出來是開始猛跌,是筆者認為最不適合進行購買的,若是將其再次售出的時候價格往往非常的低,若是想要幾年後將其售出最好不要選擇這類車型。而打算長期使用的也要考慮一下維修保養的問題,畢竟此時整車性能已經下降有一定區間,使用成本也上升了一些。並且已經過了6年免過檢測線的年審,需要每兩年上檢測線檢測年審,這無形增加一部分成本。

    中老年時期(6-10年,里程在20萬公里以上)

    在這個時期車輛的性能狀況是大幅度下降,動力水平下降明顯,油耗明顯上升,維修保養費用也是大幅度增長,在使用的過程中總是需要到4S店或者是維修店進行檢修,以避免因為部件老化或者是部件的突然損壞而導致“趴窩”或者是“小病養成大病”,而且發動機變速箱此時也開始湧現不少問題,有可能需要進行中修或者大修,使用成本是每個時期中最高的,無論是貨幣成本還是時間成本。

    對於二手車來說,這個時期的二手車基本達到車價的最低水平,殘值率已經達到幾乎最低的水平。但這也是不值得購買的,沒有再次售出的價值,瀕臨汽車使用的經濟使用壽命,要想將其再次售出基本是件不可能的事。

    老年時期(10年以上車齡)

    此時的車輛狀況已經處於整車的最低點,整車性能甚至沒有新車時的20%,動力表現極差,油耗奇高,而且此時的安全氣囊也有很大的可能失效,所以必須時刻注意安全氣囊指示燈的狀況,以便出現缺乏安全保護的情況下駕駛。

    這個時期的二手車,筆者就只有一句話“不要買”,已經沒有任何價值,要做好下家是報廢廠的準備。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

  • 氣場碾壓漢蘭達的平民版奧迪Q7 上市后是要大殺四方了!_網頁設計公司

    氣場碾壓漢蘭達的平民版奧迪Q7 上市后是要大殺四方了!_網頁設計公司

    南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

    搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

    動力方面,根據上汽大眾在工信部申報消息的流出,此款SUV將會搭載一款2。0T發動機,且會分為高低功率版本,此外,還會配備一台2。5T V6發動機。至於發動機型號以及技術特點我們暫時不得而知,但是有一點幾乎可以肯定,V6發動機配置車型鐵定不會便宜。

    前段時間上汽大眾旗下旗艦C級轎車輝昂迎來了正式上市,而上汽大眾官方也正式透露消息,除了輝昂之外,在不久的將來,上汽大眾會有一台中型SUV國產上市,有望於在2017年第一季度正式推出。

    全新的SUV衍生於大眾Cross Blue概念車,雙幅式鍍鉻中網與燈組相連,整體性更強,視覺效果也會顯得整車更寬。

    當下該SUV尚未有正式的中文命名,但已經在美國發布的車型英文名稱定為“Atlas”。根據大眾品牌現有的途觀、途銳兩款SUV來看,或許會為了車型家族化特徵更加明顯,將這款SUV以“途”字命名,

    ※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

    節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

    至於叫什麼好聽,我們只能等待官方消息,當然,也歡迎各位朋友在留言中各抒己見。

    車身尺寸方面,Atlas車長超過5米,整車三圍尺寸為:5039*1989*1773mm,而軸距也會達到2980mm。從尺寸上看已經超過了現款途銳,與奧迪Q7的車身尺寸倒是非常相近(奧迪Q7尺寸為5069*1968*1716mm)。

    動力方面,根據上汽大眾在工信部申報消息的流出,此款SUV將會搭載一款2.0T發動機,且會分為高低功率版本,此外,還會配備一台2.5T V6發動機。至於發動機型號以及技術特點我們暫時不得而知,但是有一點幾乎可以肯定,V6發動機配置車型鐵定不會便宜。

    上汽大眾的全新中型SUV推出其實也是一個勢在必行的動作,畢竟目前合資中型SUV幾乎是漢蘭達和銳界的天下,作為國人信任程度極高的大眾品牌,旗下只有一款途觀在撐着場面有些略顯尷尬,不出意外該款全新SUV將會有5座和7座的兩種作為布局選擇。距離該車上市尚有一段時間,小編也會持續對其保持高度關注。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

  • 氣候變遷致乾旱 亞馬遜部分樹種適應不良死亡_網頁設計公司

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

    環境資訊中心綜合外電;姜唯 編譯;林大利 審校

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

  • 「體驗式」旅遊的犧牲品 寮國幼象大量走私入中國、杜拜_網頁設計公司

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

    環境資訊中心綜合外電;姜唯 編譯;林大利 審校

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

  • 日本福島核污水入海輻射恐超標90萬倍 韓國政府震怒擬提告_網頁設計公司

    南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

    搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

    摘錄自2020年10月22日新頭殼報導

    日本政府日前做出福島核污水入海的決議,27日將舉行會議,正式決定是否將福島核電站一號機組污水排入太平洋,引發韓國政府不滿。韓國KBS電視台近期曝光日調查人員進入福島核電站勘查的影片,檢測出三、四樓的輻射劑量超過人體每年可承受輻射量上限的90萬倍,南韓濟州特別自治道知事元喜龍20日也表示,將集結濟州島、大韓民國、韓日沿岸居民構成代表團,擬向韓日兩國法院提起刑事與民事訴訟。

    日本核污水入海爭議不斷,從國內延燒至國外,日本政府目前擬定將污水稀釋後排入海洋,不過KBS最新釋出的影片指出,自2013年311大地震至今,福島核電站1到3號機組仍有880噸核燃料,其中殘有10萬兆貝克的放射性物質。

    ※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

    節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

    對此,元喜龍20日召開記者會呼籲日本政府應立即停止排放核廢水之相關準備,並在透明與公開的原則下主動提供所有資訊,進行處理核廢水之相關協議,並表示若日本拒絕,濟州島將不排除聯合受核廢水影響的所有當事者,向日政府提起訴訟。

    污染治理
    國際新聞
    日本
    韓國
    核能
    核廢水

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

  • Redmi K40 系列 S888 旗艦新機確定將於 2 月發表,官方提前公布售價約 12,912 元起_網頁設計公司

    Redmi K40 系列 S888 旗艦新機確定將於 2 月發表,官方提前公布售價約 12,912 元起_網頁設計公司

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

    今日除了 iQOO7 將發表,包括 Redmi 、黑鯊以及紅魔都陸續開始新機預吿宣傳,其中備受矚目的 Redmi K40 系列也終於由 Redmi 總經理盧偉冰宣布將在下個月發表,除了直接宣稱 2021 旗艦性價比之王,同時也預告 K40 系列將搭載高通 Snapdragon 888 旗艦處理器、可能是最貴的平面螢幕,甚至是直接將起售價提前公開。

    ▲圖片來源:盧偉冰(微博)

    Redmi K40 系列 S888 旗艦新機確定將於 2 月發表,官方提前公布售價約 12,912 元起

    在去年底高通發表 Snapdragon 888 處理器、並由小米11 首發搭載此旗艦處理器後,也有許多人接著將目光放在更主打性價比的 Redmi K 系列旗艦新機。前段時間,不僅疑似 Redmi K40 系列的工程機曝光,也有人製作了 Redmi K40 系列的新機渲染圖(點我前往複習)。
    今日稍早,小米集團副總裁、 Redmi 紅米品牌總經理盧偉冰無預警在個人微博開始了 Redmi K40 系列的新機預告宣傳,除了之前大家都知道 K40 系列將有搭載高通 Snapdraon 888 處理器的旗艦手機,盧偉冰在微博更直接將 Redmi K40 系列的起售價直接公開,建議售價為人民幣 2,999 元起(約合新台幣 12,912 元起)的價格,此價格和去年搭載高通 Snapdragon 865 處理器的 Redmi K30 Pro 維持不變。

    ▲圖片來源:盧偉冰(微博)

    雖然發表前直接由品牌總經理直接爆雷還是十分罕見,但各位也不必看到價格就高興太早,因為目前公佈的價錢預計是 Redmi K40 標準版的售價, Redmi K40 系列預計將不會「全系列」都搭載高通 Snapdragon 888 處理器,可能只會在高階的 Redmi K40 Pro 搭載。

    ▲圖片來源:盧偉冰(微博)

    螢幕方面,盧偉冰提到可能是最貴的平面螢幕,這也與之前我們報導過疑似 Redmi K40 工程機洩漏的傳聞相符,據悉 Redmi K40 全系列將採用 120Hz 更新率的 OLED 居中挖孔全螢幕,電量部分確定大於 4000mAh ,而快充速度目前尚未揭曉。

    ▲圖片來源:酷安網

    在今(12)日中午前,聯發科預告將於 1 月 20 日舉行 MediaTek 天璣新品發表會,傳聞將發表最新的 6nm 旗艦處理器,按照「往例」和這段時間的各方消息,這款聯發科新的旗艦處理器預計將由 Redmi 首發搭載,至於那款機型預計就是 Redmi K40 。

    ▲圖片來源:聯發科技官方微博(微博)

    之前在 Geekbench 資料庫也出現疑似為聯發科新旗艦處理器的跑分數據,其 CPU 效能表現超越當前聯發科天璣 1000+ 、直逼高通 Snapdragon 865 。
    筆者個人推測屆時 Redmi K40 系列發表時,也將以搭載 6nm 聯發科旗艦處理器的 Redmi K40 標準版來對比去年 Redmi K30 Pro 的性能作為宣傳,以強調這次 Redmi K40 系列的性價比。

    ▲圖片來源:Geekbench

    回顧去年底至上週之間數碼閒聊站之前的爆料, Redmi K40 和 K40 Pro 皆採用 120Hz 更新率 OLED 螢幕,不過處理器和相機規格略有不同。前相機方面,Redmi K40 系列捨棄上一代的升降式前鏡頭,全面改採用居中的挖孔全螢幕。相機方面, Redmi K40 將配備 6400 萬像素主相機,而 Redmi K40 Pro 則為 1.08 億像素主相機。

    ▲圖片來源:數碼閒聊站(微博)

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

    消息來源:盧偉冰(微博)

    延伸閱讀:
    小米11 Pro 最新高清晰概念渲染圖曝光!傳聞搭載 50MP 四鏡頭主相機,支持 120x 混合變焦

    POCO M3 即將在台發表:6000mAh 超大電量,規格重點搶先看!

    您也許會喜歡:

    【推爆】終身$0月租 打電話只要1元/分

    立達合法徵信社-讓您安心的選擇

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境