有一个我想在TextView中显示的时钟.
我原本以为有一些很好的功能可以做到这一点,但我找不到任何东西.我最终实现了自己使用Handler的方式.我问的是,是否有更好(更有效)的方式来显示实时更新时钟?
private Runnable mUpdateClockTask = new Runnable() {
public void run() {
setTime();
mClockHandler.postDelayed(this, 1000);
}
};
Run Code Online (Sandbox Code Playgroud)
这是我的处理程序,它每秒运行一次,然后我的设置时间和日期功能在下面
TextView mClockView;
public void setTime() {
Calendar cal = Calendar.getInstance();
int minutes = cal.get(Calendar.MINUTE);
if (DateFormat.is24HourFormat(this)) {
int hours = cal.get(Calendar.HOUR_OF_DAY);
mClockView.setText((hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes));
}
else {
int hours = cal.get(Calendar.HOUR);
mClockView.setText(hours + ":" + (minutes < 10 ? "0" + minutes : …Run Code Online (Sandbox Code Playgroud) 我想得到这个时间戳格式:
01/13/2010 20:42:03 - -
Run Code Online (Sandbox Code Playgroud)
除了年份,数字总是2位数,其中4位数.它基于24小时制.
我怎么能在Perl中做到这一点?我更喜欢原生功能.
我正面临着我制作的时钟小部件的问题.我希望用户触摸时钟并在手机上启动时钟应用程序.这是代码:
//this worked on my nexus 2.1
if(VERSION.SDK.equals("7")){
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
Intent AlarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER).setComponent(new ComponentName("com.android.deskclock", "com.android.deskclock.DeskClock"));
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, AlarmClockIntent, 0);
views.setOnClickPendingIntent(R.id.Widget, pendingIntent);
AppWidgetManager.getInstance(context).updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), views);
}
//this worked on my nexus +froyo2.2
else if(VERSION.SDK.equals("8")){
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
Intent AlarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER).setComponent(new ComponentName("com.google.android.deskclock", "com.android.deskclock.DeskClock"));
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, AlarmClockIntent, 0);
views.setOnClickPendingIntent(R.id.Widget, pendingIntent);
AppWidgetManager.getInstance(context).updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), views);
}
//this worked on my htc magic with 1.5 and 1.6
else{
RemoteViews views = …Run Code Online (Sandbox Code Playgroud) 惹恼我的错误与此票相同.基本上,如果您将OS时钟更改为过去的日期,则更改时正在休眠的所有线程都不会被唤醒.
我正在开发的应用程序意味着24/24运行,我们希望能够在不停止的情况下更改操作系统日期(例如,从夏季时间切换到冬季时间).目前发生的事情是,当我们将日期更改为过去时,应用程序的某些部分就会冻结.我观察到在多台机器上,在Windows XP和Linux 2.6.37上,以及最近的JVM(1.6.0.22).
我尝试了很多Java睡眠原语,但它们都有相同的行为:
现在,我不想解决这个问题.我认为我无法阻止睡眠线冻结.但我想至少在检测到危险的系统时钟变化时警告用户.
我想出了一个监控线程来检测这些变化:
Thread t = new Thread(new Runnable() {
@Override
public void run() {
long ms1 = System.currentTimeMillis();
long ms2;
while(true) {
ms2 = ms1;
ms1 = System.currentTimeMillis();
if (ms1 < ms2) {
warnUserOfPotentialFreeze();
}
Thread.yield();
}
}
});
t.setName("clock monitor");
t.setPriority(Thread.MIN_PRIORITY);
t.setDaemon(true);
t.start();
Run Code Online (Sandbox Code Playgroud)
问题是这使得应用程序在空闲时从2%的CPU使用率增长到15%.
你有想法解决原始问题,或者你能想到另一种监控线程冻结外观的方法吗?
Ingo建议不要触摸系统时钟.我同意通常不需要它.问题是我们无法控制客户对计算机的操作(我们计划销售数百份).
更糟糕的是:我们的一台机器没有任何人工干预就会出现这个问题.我想OS(Windows XP)会定期将其时钟与RTC时钟同步,这使得OS时钟自然会及时回溯.
我发现我的问题中的一些陈述是错误的.我最初的问题实际上涉及两个不同的原因.现在,我可以肯定地说两件事:
在我的机器只(ArchLinux的内核2.6.37与OpenJDK的64位1.6.0_22) ,Thread.sleep,,Object.wait 有同样的问题:他们醒来,只有当系统时钟到达觉醒的"目标"的时间.但是,我的shell中的一个简单不会出现问题.Thread.joinLockSupport.parkNanossleep
在我测试的所有机器上(包括我的),java.util.Timer并且 …
我有一些时钟脚本.一切都很好,它的工作完美,但......我有一个问题.如果在时钟设置一位数小时或分钟,如1:5时钟之前不添加"0"数字.这就是我所做的,但它不起作用.你可以帮助我吗?
window.setInterval(function update_clock() {
var currentTime = new Date();
var currentHours = currentTime.getHours();
var currentMinutes = currentTime.getMinutes();
$.ajax({
success: function (clock) {
document.getElementById("hour").firstChild.nodeValue = currentHours;
document.getElementById("minutes").firstChild.nodeValue = currentMinutes;
if (currentMinutes.length == 1) {
currentMinutes = "0" + currentMinutes;
}
}
});
}, 999);
Run Code Online (Sandbox Code Playgroud) 我正在考虑在我的应用程序中编写一个简单的同步功能,其中一个问题是两个远程计算机之间的时间同步,每个计算机都有自己的时钟(特别是关于文件/对象的修改日期).
我确信已就这一主题进行了大量研究,并且不想过于理论化,但我想知道是否有任何可接受的最佳实践可以最大限度地减少远程时钟之间的时间差异?
例如,一个开始是始终使用通用时间(UTC),因为这可以避免时区问题,但不能保证两台计算机将具有完全相同的系统时间.幸运的是,我正在做的工作并不是非常精细,所以它并不是一个非常重要的问题,但我仍然很好奇.
一种解决方案是始终在两端使用相同的时钟,例如全局时间服务器,而不是本地系统时钟.据推测,这(与共享资源锁相结合)可以保证同步时间不会意外重叠,但这不是很实用.
有人认为只是突然出现在每个节点(每个客户端)与先前某点计算的偏移同步,可能是通过计算系统时钟与全球时间服务器的偏移量.这只需要偶尔进行,因为偏移本身不会在短时间内发生很大变化.
更新:我只想补充一点,我对实际同步两台计算机的系统时钟并不感兴趣 - 我认为操作系统在大多数情况下都会处理这个问题.这只是一个如何确保应用程序的两个实例使用同步时间的问题,尽管在这个时代,我认为系统时钟几乎肯定会在一些非常小的delta内同步.
请考虑以下源代码,它完全符合POSIX:
#include <stdio.h>
#include <limits.h>
#include <stdint.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/time.h>
int main (int argc, char ** argv) {
pthread_cond_t c;
pthread_mutex_t m;
char printTime[UCHAR_MAX];
pthread_mutex_init(&m, NULL);
pthread_cond_init(&c, NULL);
for (;;) {
struct tm * tm;
struct timeval tv;
struct timespec ts;
gettimeofday(&tv, NULL);
printf("sleep (%ld)\n", (long)tv.tv_sec);
sleep(3);
tm = gmtime(&tv.tv_sec);
strftime(printTime, UCHAR_MAX, "%Y-%m-%d %H:%M:%S", tm);
printf("%s (%ld)\n", printTime, (long)tv.tv_sec);
ts.tv_sec = tv.tv_sec + 5;
ts.tv_nsec = tv.tv_usec * 1000;
pthread_mutex_lock(&m);
pthread_cond_timedwait(&c, &m, &ts);
pthread_mutex_unlock(&m);
}
return 0; …Run Code Online (Sandbox Code Playgroud) 我已经看过这个http://kaasxxx.wordpress.com/2008/01/22/linux-hz-checker/ 但是剧本似乎没有用.无论如何知道在Linux终端中检查"HZ"的简单方法吗?
我正在制作一个模拟时钟应用程序,在一个应用程序中有大约15个设计.设置设计的一种方法是widgetconfigs.XML为每个设计创建不同的设置,但这会使运行4.0+的设备变得混乱.
我还想过设置一个允许更改设计的活动
remoteviews.setInt(R.id.analogClock1, "setDialResource", R.drawable.clock1);
Run Code Online (Sandbox Code Playgroud)
但这不允许设置手绘画......我还能做什么?
我正在努力让rails 3应用程序准备好使用时区.我的开发机器在EDT中,我托管的服务器是UTC.我的rspec测试中是否有一种方法可以更改ruby正在使用的系统时区,以便我使用相同的系统时区运行测试而无需更改计算机上的系统时钟?我看过Delorean和Timecop,他们不是我想要的.我正在寻找类似的东西
Time.system_time_zone = "UTC"
Run Code Online (Sandbox Code Playgroud)
...然后Time.now将返回UTC时间,而不是我的系统时区设置的任何时间.