• Android 获取系统时间和网络时间


    有些时候我们的应用中只能使用网络时间,而不能使用系统的时间,这是为了避免用户关闭了使用网络时间的功能后所产生的误差。

    直接上代码。

    1.清单文件中网络添加权限。

    <!-- 访问Internet资源 -->
    <uses-permission android:name="android.permission.INTERNET" />

    2.布局文件activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.mythmayor.gettime.MainActivity">
    
        <TextView
            android:id="@+id/tv_nettime"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Hello World!"
            android:textSize="22sp" />
    
        <Button
            android:id="@+id/btn_nettime"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:text="获取当前网络时间"
            android:textSize="20sp" />
    
        <Button
            android:id="@+id/btn_localtime"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:text="获取当前系统时间"
            android:textSize="20sp" />
    </LinearLayout>

    3.MainActivity.class主界面中的逻辑

    package com.mythmayor.gettime;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.net.URL;
    import java.net.URLConnection;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    
    public class MainActivity extends Activity implements View.OnClickListener {
    
        private TextView tvNetTime;
        private Button btnNetTime;
        private Button btnLocalTime;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            /** 初始化控件 */
            initView();
            /** 处理用户输入 */
            handleUserInput();
        }
    
        private void initView() {
            tvNetTime = (TextView) findViewById(R.id.tv_nettime);
            btnNetTime = (Button) findViewById(R.id.btn_nettime);
            btnLocalTime = (Button) findViewById(R.id.btn_localtime);
        }
    
        private void handleUserInput() {
            btnNetTime.setOnClickListener(this);
            btnLocalTime.setOnClickListener(this);
        }
    
        private void getNetTime() {
            URL url = null;//取得资源对象
            try {
                url = new URL("http://www.baidu.com");
                //url = new URL("http://www.ntsc.ac.cn");//中国科学院国家授时中心
                //url = new URL("http://www.bjtime.cn");
                URLConnection uc = url.openConnection();//生成连接对象
                uc.connect(); //发出连接
                long ld = uc.getDate(); //取得网站日期时间
                DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(ld);
                final String format = formatter.format(calendar.getTime());
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, "当前网络时间为: 
    " + format, Toast.LENGTH_SHORT).show();
                        tvNetTime.setText("当前网络时间为: 
    " + format);
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private void getLocalTime() {
            URL url = null;//取得资源对象
            try {
                DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                String format = formatter.format(calendar.getTime());
                Toast.makeText(this, "当前系统时间为: 
    " + format, Toast.LENGTH_SHORT).show();
                tvNetTime.setText("当前系统时间为: 
    " + format);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_nettime:
                    //获取网络时间
                    //请求网络资源是耗时操作。放到子线程中进行
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            getNetTime();
                        }
                    }).start();
                    break;
                case R.id.btn_localtime:
                    //获取系统时间
                    getLocalTime();
                    break;
                default:
    
                    break;
            }
        }
    }

    最后附上源码下载地址

    点击此处进入源码下载界面

    Android - 获取系统时间和网络时间

  • 相关阅读:
    python计算纹理特征
    遥感影像提取农作物种植分布数据之经验总结
    Python实现多线程调用GDAL执行正射校正
    Centos7.3 编译安装GDAL以及Python的GDAL包
    C#通过COM组件调用IDL的pro程序
    IDL实现矢量文件裁剪栅格数据
    HttpClient使用示列(post请求的)
    SpringBoot自带的定时功能
    mysql安装与启用
    dos命令之端口查看
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/9752669.html
Copyright © 2020-2023  润新知