如何将以下python代码转换为Java?
import time
str(int(time.time() * 1e6))
我在Java项目中尝试了以下代码段。
private static String runPython(String script) throws Exception{
File file = new File("test.py");
if(file.exists()) {
file.delete();
}
BufferedWriter out = new BufferedWriter(new FileWriter("test.py"));
out.write(script);
out.close();
Process p = Runtime.getRuntime().exec("python test.py ");
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String ret = in.readLine();
return ret+"";
}
private static String getFromPython() {
try {
String prg = "import time\nprint str(int(time.time() * 1e6))\n";
return runPython(prg)+"";
}catch(Exception e){
e.printStackTrace();
}
return null;
}
public static String getFromJava() {
String result = ((System.currentTimeMillis() / 1000) * 1e6)+"";
return result;
}
public static void main(String[] args) {
System.out.println("Python Version: "+getFromPython());
System.out.println("Java Version: "+getFromJava());
}
这是我得到的不同结果
run:
Python Version: 1417515400105953
Java Version: 1.4175154E15
任何一个有更好方法的人? python中的time.time()与Java中的System.currentTimeInMillies()有什么不同?
答案 0 :(得分:1)
等同于time.time()
的是System.currentTimeMillis()/1000.0
。
相当于
str(int(time.time() * 1e6))
因此
String.valueOf((int) (System.currentTimeMillis() / 1000.0) * 1e6)
可以简化为
String.valueOf(System.currentTimeMillis() * 1000)
答案 1 :(得分:1)
它几乎相同,只是在python中你得到16位数字(十进制之前10位数字由time.time()+ 6位小数后)而在java中你得到13位数字。你的等效代码是
String result = (System.currentTimeMillis() * 1000) + "";
答案 2 :(得分:1)
您获得的两个值非常相似 - 只是表示形式不同。这主要是因为在Java版本中,您乘以1e6
这是一个浮点字面值,因此结果是double
,由于其大小,它以科学记数法表示。 Python的数字类型更加自由,并选择显示结果而不使用科学记数法。
如果你乘以整数文字1000000,你会得到像"1417515400000000"
这样的东西 - 它看起来更接近Python版本,但被截断到第二个。
如果不是除以1,000然后乘以1,000,000,而只乘以1,000,你就会得到更像"1417515400105000"
的东西。这仍然被截断到毫秒,但我怀疑你的时钟不可能比这更准确。
顺便说一句,我建议使用String.valueOf(x)
将非字符串类型转换为字符串而不是使用x + ""
- 它更好地描述了您要做的事情,因为您真的根本不试图进行连接。所以我建议你的getValueFromJava
方法应该是:
public static String getFromJava() {
return String.valueOf(System.currentTimeMillis() * 1000);
}
(目前还不清楚为什么你首先需要这个字符串,但这是另一回事。)