我正在添加这个问题,因为我是Java和Android的新手,我搜索了几个小时试图解决这个问题.答案来自相关答案的组合,所以我想我会记录我为其他可能正在努力的人学到的东西.见答案.
对于一些背景知识,我的经验主要是PHP的Web开发和一点Ruby.我唯一的操作系统是Linux(Ubuntu Studio),我(不情愿地)在Android Studio 2.1.2中开发我的第一个Android应用程序.我的Java设置如下:
>java -version
> openjdk version "1.8.0_91"
> OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~15.10.1-b14)
> OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
Run Code Online (Sandbox Code Playgroud) datetime android android-gradle-plugin threetenbp threetenabp
我正在寻找一个处理GPS时间转换的Java库.
GPS时间有一个1980年1月6日的时代,并没有闰秒,因此它与更标准的时间表示不同.以下是维基百科的相关说明:
虽然大多数时钟与协调世界时(UTC)同步,但卫星上的原子钟设置为GPS时间.不同之处在于未校正GPS时间以匹配地球的旋转,因此它不包含闰秒或定期添加到UTC的其他校正.GPS时间设定为与1980年的协调世界时(UTC)相匹配,但后来发生了分歧.缺少校正意味着GPS时间与国际原子时(TAI)(TAI-GPS = 19秒)保持恒定的偏移.对板载时钟执行周期性校正以校正相对论效应并使它们与地时钟保持同步.
GPS导航消息包括GPS时间和UTC之间的差异,由于闰秒在2008年12月31日添加到UTC,因此截至2009年为15秒.接收器从GPS时间减去此偏移以计算UTC和特定时区值.在收到UTC偏移消息之前,新的GPS单元可能无法显示正确的UTC时间.GPS-UTC偏移场可以容纳255闰秒(8位),考虑到地球自转的当前变化速率(大约每18个月引入一闰秒),应足以持续到大约2300年.
与公历的年,月,日格式相反,GPS日期表示为星期数和秒周数.周数作为C/A和P(Y)导航消息中的十位字段发送,因此每1,024周(19.6年)再次变为零.GPS周0从1980年1月6日00:00:00 UTC(00:00:19 TAI)开始,周数在1999年8月21日23:59:47 UTC时首次变为零(00 :00:19 TAI,1999年8月22日).要确定当前的格里高利日期,必须为GPS接收器提供大致日期(在3,584天内)以正确转换GPS日期信号.为了解决这个问题,现代化的GPS导航消息使用13位字段,每8,192周(157年)只重复一次,
我宁愿不必自己动手; 我没有在Joda时间看到任何表明它可以处理GPS编码日期的东西..有没有办法扩展它?
是否有任何直接的方式将从1980年1月6日开始的一定时间转换为UTC格式,如YYYY/MM/DD HH:mm:ss?
编辑:这是代码工作:
private Date gpsInit;
//...
try{
String ds = "06/01/1980";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
gpsInit = df.parse(ds);
}
catch(ParseException e) {
System.out.println("Unable to parse January 6th 1980");
}
textField = new JFormattedTextField(format);
textField.setText(formatUTC(min));
//...
private String formatUTC(int timeValue) {
long diference = timeValue + gpsInit.getTime()/1000;
String pattern = "yyyy/MM/dd HH:mm:ss";
SimpleDateFormat utcFormat = new SimpleDateFormat(pattern);
Date utcNow = new Date(diference*1000);
return utcFormat.format(utcNow);
}
Run Code Online (Sandbox Code Playgroud) datetime ×2
java ×2
android ×1
date ×1
jodatime ×1
swing ×1
threetenabp ×1
threetenbp ×1
time ×1