我一直在为Android应用程序的这段代码挣扎一段时间,我无法理解它。我已经阅读并尝试了我在stackoverflow和其他地方找到的每个解决方案,但仍然没有运气。
我想要做的是有一个函数将"17.08.2012 05:35:19:7600000"
之类的字符串转换为UTC日期,以及一个函数,它接受UTC date
并将其转换为类似的字符串。
String value = "17.08.2012 05:35:19:7600000";
DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss:SSSSSSS");
try
{
Date today = df.parse(value);
System.out.println("Today = " + df.format(today) + " " + today.toGMTString());
}
catch (ParseException e)
{
e.printStackTrace();
}
这导致:Today = 17.08.2012 07:41:59:0000000 17 Aug 2012 04:41:59 GMT
这两个都是错误的。
我尝试将SDF's timezone
设为UTC
,但没有运气
我注意到的另一件事:如果我做df.setLenient(false);
它给了我:java.text.ParseException: Unparseable date: "17.08.2012 05:35:19:7600000"
。
如果有人能提供一些解释/示例代码,我将非常感激。提前致谢
答案 0 :(得分:20)
你得到的结果绝对正确。
让我们分析一下:
17.08.2012 05:35:19:7600000
现在,VM看到这种情况的方式是你将时间宣布为5:35:19 am,然后再添加7,600,000毫秒。 7,600,000毫秒= 7,600秒= 2小时6分40秒。凌晨5:35:19 + 02:06:40 = 7:41:59 am(和0毫秒)这是你得到的结果。 (您似乎没有正确设置时区,因此GMT字符串比您的结果落后3小时。)
如果您想保留:7600000
,据我所知,这是不可能的。由于这可以简化为几秒钟,因此VM会自动将其减少到其他时间增量。毫秒(SSSS
)应该用于存储值<1000。
我建议您为输出创建一个新的SimpleDateFormat
;但请记住,毫秒将被吸收到其他时间(因为它们都存储为long
对象中的单个Date
。
答案 1 :(得分:6)
private String convertDate(String cdate)
{
SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss:SSSSSSS");
SimpleDateFormat postFormater = new SimpleDateFormat("yyyy-MM-dd");
Date convertedDate;
try
{
convertedDate = dateFormat.parse(cdate);
cdate = postFormater.format(convertedDate);
}
catch (ParseException e)
{
Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_SHORT).show();
}
return cdate;
}
试试这个。
答案 2 :(得分:3)
这就是你所需要的(但它会丢失毫秒信息):
C:\Users\daniel.bak\Desktop\Tableau Client Data Extracts\Master Data Extracts>fo
r /F "tokens=*" %Z in ('type "C:\Users\daniel.bak\Desktop\Tableau Client Data Ex
tracts\Master Data Extracts\clients.txt"') do (for /F "delims=; tokens=1,2" %B i
n (%Z) do (
echo %B
echo %C
) )
C:\Users\daniel.bak\Desktop\Tableau Client Data Extracts\Master Data Extracts>(f
or /F "delims=; tokens=1,2" %B in (2;Glaxo Smith Kline) do (
echo %B
echo %C
) )
The system cannot find the file 2.
C:\Users\daniel.bak\Desktop\Tableau Client Data Extracts\Master Data Extracts>(f
or /F "delims=; tokens=1,2" %B in (3;Merck Canada Inc.) do (
echo
echo %C
) )
The system cannot find the file 3.
C:\Users\daniel.bak\Desktop\Tableau Client Data Extracts\Master Data Extracts>pa
use
Press any key to continue . . .
如果您使用2;herpherp
3;derpderp
,则会在几毫秒内获得三个前导零。
如果您使用"dd.MM.yyyy HH:mm:ss.'000000'"
,则可以格式化日期,但不能解析任何日期。
尝试一下:
"dd.MM.yyyy HH:mm:ss.SSSSSS"
答案 3 :(得分:0)
要降低纳秒,请使用:
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.")