按下计算按钮,怎么不显示出差值

YXTS122 2018-01-11 11:24:06
package com.example.diff;

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

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.format.DateFormat;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

private Button Btn4;
private EditText editText1;
private TextView textView1,textView2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Btn4 = (Button) findViewById(R.id.btn4);
editText1 = (EditText) findViewById(R.id.EditText1);
textView1 = (TextView) findViewById(R.id.TextView1);
textView2 = (TextView) findViewById(R.id.TextView2);
new TimeThread().start();

Btn4.setOnClickListener(new MyClickListener());
}

class MyClickListener implements View.OnClickListener{

@Override
public void onClick(View v) {
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
Date currentTime = new Date();
String date1 = df.format(currentTime);
try
{
int I1 = editText1.length();

//pattern matcher /d/d/:/d/d:/d/d
if (I1 == 8)
{
CharSequence ed1 = editText1.getText();
String date2 = df.format(ed1);
try{
Date d1 = df.parse(date1);
Date d2 = df.parse(date2);
//计算时间差
long diff = (d1.getTime() - d2.getTime());

long day = diff / (1000 * 60 * 60 * 24);
long hour = (diff / (60 * 60 * 1000) - day *24);
long minute = (diff / (60 * 1000) - day * 24 * 60 - hour * 60);
long s = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60);
//输出时间差
System.out.println(hour + "小时" + minute + "分" + s + "秒");
textView2.setText(hour + "小时" + minute + "分");
}
catch(Exception e){
}
}
}
catch(Exception e)
{

}
}
}


class TimeThread extends Thread
{
@Override
public void run() {
do {
try
{
Thread.sleep(1000);
Message msg = new Message();
msg.what = 1; //消息(一个整型值)
mHandler.sendMessage(msg);// 每隔1秒发送一个msg给mHandler
} catch (InterruptedException e)
{
e.printStackTrace();
}
} while (true);
}
}


private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what)
{
case 1:
long sysTime = System.currentTimeMillis();
CharSequence sysTimeStr = DateFormat.format("kk:mm:ss", sysTime);
textView1.setText(sysTimeStr); //更新时间

break;
default:
break;

}
}
};
}


...全文
755 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
YXTS122 2018-02-10
  • 打赏
  • 举报
回复
YXTS122 2018-02-10
  • 打赏
  • 举报
回复
package com.example.diff;
 
import java.text.FieldPosition;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class MainActivity extends Activity {
 
private Button Btn4;
private EditText editText1;
private TextView textView1,textView2,textView3;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
 
Btn4 = (Button) findViewById(R.id.btn4);
editText1 = (EditText) findViewById(R.id.EditText1);
textView1 = (TextView) findViewById(R.id.TextView1);
textView2 = (TextView) findViewById(R.id.TextView2);
textView3 = (TextView) findViewById(R.id.TextView3);
new TimeThread().start();
 
Btn4.setOnClickListener(new MyClickListener());
}
 
          class MyClickListener implements View.OnClickListener{
 
@Override
public void onClick(View v) {
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
Date date = new Date();
String currentTime = textView1.getText().toString();
StringBuffer date1 = df.format(date,new StringBuffer(),new FieldPosition(SimpleDateFormat.DATE_FIELD));
try 
{
int I1 = editText1.length();
 
//pattern matcher  /d/d/:/d/d:/d/d
if (I1 == 8)
{
String ed1 = editText1.getText().toString();
String error = editText1.getText().toString();
StringBuffer date2 = df.format(date,new StringBuffer(),new FieldPosition(SimpleDateFormat.DATE_FIELD));
try{ 
Date d1 = df.parse(currentTime);
Date d2 = df.parse(ed1);
//textView2.setText(String.valueOf(d2));
//textView3.setText(String.valueOf(d2.getTime()));
//计算时间差
long diff = (d1.getTime() - d2.getTime());
 
long day = diff / (1000 * 60 * 60 * 24);
long hour = (diff / (60 * 60 * 1000) - day *24);
long minute = (diff / (60 * 1000) - day * 24 * 60 - hour * 60);
long s = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60);
//输出时间差
System.out.println(hour + "小时" + minute + "分" + s + "秒");
textView2.setText(String.valueOf(hour) + "小时" +String.valueOf(minute)+ "分"+String.valueOf(s)+"秒");
} 
catch(Exception e){
}
}
}
catch(Exception e)
{
	 Log.d("报错", e.toString());
	 textView2.setText(e.toString());
}
}
}
 
 
class TimeThread extends Thread 
{
@Override
public void run() {
do {
try 
{
Thread.sleep(1000);
Message msg = new Message();
msg.what = 1;  //消息(一个整型值)
mHandler.sendMessage(msg);// 每隔1秒发送一个msg给mHandler
} catch (InterruptedException e)
{
e.printStackTrace();
}
} while (true);
}
}
 
 
private  Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what)  
{
case 1:
long sysTime = System.currentTimeMillis();
CharSequence sysTimeStr = DateFormat.format("kk:mm:ss", sysTime);
textView1.setText(sysTimeStr); //更新时间
 
break;
default:
break;
 
}
}
};
}    
YXTS122 2018-02-10
  • 打赏
  • 举报
回复
引用 2 楼 xj396282771 的回复:
	class MyClickListener implements View.OnClickListener {

@Override
public void onClick(View v) {
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
Date currentTime = new Date();
String date1 = df.format(currentTime);
try {
int I1 = editText1.length();

// pattern matcher /d/d/:/d/d:/d/d
if (I1 == 8) {
CharSequence ed1 = editText1.getText();
String date2 = editText1.getText().toString();//这里报错
try {
Date d1 = df.parse(date1);
Date d2 = df.parse(date2);
// 计算时间差
long diff = (d1.getTime() - d2.getTime());

long day = diff / (1000 * 60 * 60 * 24);
long hour = (diff / (60 * 60 * 1000) - day * 24);
long minute = (diff / (60 * 1000) - day * 24 * 60 - hour * 60);
long s = (diff / 1000 - day * 24 * 60 * 60 - hour * 60
* 60 - minute * 60);
// 输出时间差
System.out
.println(hour + "小时" + minute + "分" + s + "秒");
textView2.setText(hour + "小时" + minute + "分");
} catch (Exception e) {
}
}
} catch (Exception e) {
Log.d("报错", e.toString());
}
}
}


你应该思考一下你报错的地方String date2 = df.format(ed1)


一纸荒年-and 2018-01-19
  • 打赏
  • 举报
回复
CharSequence ed1 = editText1.getText(); String date2 = df.format(ed1); 上面代码改成下面代码试试: String date2 = editText1.getText().toString();
Jing丶無雙 2018-01-12
  • 打赏
  • 举报
回复
	class MyClickListener implements View.OnClickListener {

		@Override
		public void onClick(View v) {
			SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
			Date currentTime = new Date();
			String date1 = df.format(currentTime);
			try {
				int I1 = editText1.length();

				// pattern matcher /d/d/:/d/d:/d/d
				if (I1 == 8) {
					CharSequence ed1 = editText1.getText();
					String date2 = editText1.getText().toString();//这里报错
					try {
						Date d1 = df.parse(date1);
						Date d2 = df.parse(date2);
						// 计算时间差
						long diff = (d1.getTime() - d2.getTime());

						long day = diff / (1000 * 60 * 60 * 24);
						long hour = (diff / (60 * 60 * 1000) - day * 24);
						long minute = (diff / (60 * 1000) - day * 24 * 60 - hour * 60);
						long s = (diff / 1000 - day * 24 * 60 * 60 - hour * 60
								* 60 - minute * 60);
						// 输出时间差
						System.out
								.println(hour + "小时" + minute + "分" + s + "秒");
						textView2.setText(hour + "小时" + minute + "分");
					} catch (Exception e) {
					}
				}
			} catch (Exception e) {
				Log.d("报错", e.toString());
			}
		}
	}
你应该思考一下你报错的地方String date2 = df.format(ed1)
  • 打赏
  • 举报
回复
建议你单步调试 看下数据变化
仅使用Arduino,显示屏和少量按钮,在16x2 LCD上显示日期的准确时钟。无需RTC模块。 硬件部件 Arduino Nano R3 × 1个 字母数字LCD,16 x 2 × 1个 触觉开关,顶部致动 × 3 微调电位器,10 kohm × 1个 跳线× 1个 最后得到了一个非常准确的时钟。运行5天后,它没有问题。 仅使用Arduino的主要问题是其内部时钟速度并非100%准确。因此,如果仅依赖于此,那么经过的毫秒数将减少一小部分,并且您正在创建的时钟将丢失或浪费时间。我的方法是测试我使用的Arduino的准确性,并确定每小时损失或获得多少毫秒。然后,所需要做的只是对速度调整进行编程,以每小时从内部跟踪的毫秒中增加或减去这种差异。 我的另一个担心是Arduino时钟是否始终不准确,但是如前所述,我编写的时钟在5天内保持了非常准确的时间,因此看来错误是一致的。 第二个问题是内部millis()函数每隔50天左右会重置一次,因此您无法操纵毫秒计数。因此,答案是使用我可以操纵的计数器替换millis()中断,该计数器将计算从午夜起的毫秒数,每天重置一次,以消除任何运行时限制。 为了评估不准确性,我假设我的计算机时钟以及因此Processing中的millis()是准确的。因此,我为Arduino创建了一个程序,每隔2秒将一次握手后经过的毫秒数发送给Processing,并编写了一个脚本供Processing处理以读取它并将其与经过的毫秒数进行比较,以显示实时结果,以及一个小时后的差值。过去。这给了在一小时内丢失或获得的毫秒数,因此给了时钟程序中用于速度调整的值。 附件提供了Arduino程序的代码和Processing脚本。

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧