java中获取了当前系统地时间,怎样每秒获取更新一次呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中获取了当前系统地时间,怎样每秒获取更新一次呢?相关的知识,希望对你有一定的参考价值。

这里是代码,请求大神帮忙补充完整,最好是后面加上注释,谢谢!
public class MainActivity extends ActionBarActivity

public String editText = "";
public Time clock = new Time();

@Override
protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);//创建新的界面(super)属于父类
setContentView(R.layout.activity_main);//创建界面

if (savedInstanceState == null)

getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();



@Override
public boolean onCreateOptionsMenu(Menu menu)

// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;


@Override
public boolean onOptionsItemSelected(MenuItem item)
//菜单以及菜单的响应
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in androidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings)

return true;

return super.onOptionsItemSelected(item);


/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment

private TextView tvResult=null;//新的TextV

private OnClickListener mListener = new OnClickListener()

@Override
public void onClick(View arg0)

if (arg0.getId() == R.id.btn1)

startActivity(new Intent(PlaceholderFragment.this.getActivity(), AddActivity.class));//启动那个类要告诉startActivity

else if (arg0.getId() == R.id.btn2)

startActivity(new Intent(PlaceholderFragment.this.getActivity(),SetupActivity.class));



;

// 构造函数 constructor
public PlaceholderFragment()




@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)

SimpleDateFormat formatter = new SimpleDateFormat ("yyyy年MM月dd日 HH:mm:ss ");
Date curDate = new Date(System.currentTimeMillis());//获取当前时间
String str = formatter.format(curDate);

View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
tvResult= (TextView)rootView.findViewById(R.id.tvResult);
tvResult.setText("Time");

tvResult.setText(formatter.format(curDate));

TextView btn1=(TextView)rootView.findViewById(R.id.btn1);
btn1.setText("添加闹钟");
TextView btn2=(TextView)rootView.findViewById(R.id.btn2);
btn2.setText("设置");

tvResult.setOnClickListener(mListener);
btn1.setOnClickListener(mListener);
btn2.setOnClickListener(mListener);

return rootView;

;

楼上说得不错,我补充一点,你先开启一个线程,然后在线程里面写一个死循环,让java代码不断的去获取系统时间,注意一定要把死循环放在你单独开启的那个线程里面,不然会出错哦. 可以用while(true)代码 这种形式来写,循环代码里面主要包含两个内容,一个是获取系统当前时间,然后让线程睡眠一秒钟,就是调用Thread里面的sleep方法,这样就可以了 参考技术A 1、可以写个计数器多线程方式
2、多线程有继承Thread类 和 实现Runnable接口两种实现方式
3、一般会考虑用实现Runnable接口会更好一点,因为Runnable接口能够实现资源的共享
参考技术B 开启一个线程,每秒更新时间 参考技术C Thread + Handler

为啥它每秒都在不断地重新获取 graphQL?

【中文标题】为啥它每秒都在不断地重新获取 graphQL?【英文标题】:Why it is continuously re-fetching graphQL on every second?为什么它每秒都在不断地重新获取 graphQL? 【发布时间】:2020-05-27 18:28:13 【问题描述】:

在我的 NextJs 前端应用程序中使用带有 graphQL 的 Strapi 服务器上的 @apollo/react-hooks useQuery() 过滤当前日期时间的数据。 myComponent 在 _app.js 之后渲染为子组件

myComponent.js

import  useQuery  from "@apollo/react-hooks";
import  MY_QUERY  from "../apollo/queries/home/home";

export default () => 

  let currentDateTime = new Date(Date.now());
  let currentIsoDateTime = currentDateTime.toISOString();
  const  data, loading, error  = useQuery(MY_QUERY, 
    variables: 
      currentIsoDateTime: currentIsoDateTime
    
  );

  return <>data</>

查询

export const MY_QUERY = gql`

  query($currentIsoDateTime: DateTime)
    events(where:DateTime_gt:$currentIsoDateTime)
      id
      Title
      DateTime
    
  
`;

currentDateTime 随时间变化,从 graphQL 中获取数据,结果无限

【问题讨论】:

【参考方案1】:

查询消耗currentIsoDateTime 那么这是一个要在状态中定义的变量:

const [currentIsoDateTime] = React.useState(() => new Date(Date.now()).toISOString() );

【讨论】:

【参考方案2】:

数据加载完毕后,apollo 会更新loading 状态,这会重新渲染你的组件。现在因为 Date 是在 render 方法中创建的,它会在每次渲染时创建不同的时间。

这会更改 GraphQL API 的变量,并且 apollo 将使用新变量重新获取 API 调用。

您可以检查开发控制台中的网络选项卡,并查看每个查询都使用不同的currentISODateTime 值调用

为避免这种情况,您可以通过将其初始化为状态来重新使用初始日期时间。例如

const [currentDateTime] = React.useState(() => new Date(Date.now()));

【讨论】:

你解释的很完美,但在将currentDateTime 初始化为一个状态后,它仍然让我遇到同样的问题。有没有其他方法可以解决? 你可以试试 console.log currentIsoDateTime 看看每次渲染后值是否变化? 如果currentIsoDateTime 没有在查询中作为变量应用,则最多打印 2 次​​span> 如果它被渲染 2 次,那么它是正确的行为:1 次初始加载和 1 次获取数据后。但前提是你不使用currentIsoDateTime。 2 个打印的值是相同还是不同? 两个打印值相同

以上是关于java中获取了当前系统地时间,怎样每秒获取更新一次呢?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中怎样获取数据库中查询出来的日期

java中想获取前一天的开始和结束的两个毫秒数,请问分别怎样获取???????

java怎样获取当前目录路径

非常频繁地更新datagridview

每秒更新来自 api 的消息

【Java】怎样获取当前系统时间,需要的格式为yyyy-MM-dd HH:mm:ss