如何将python time.time()转换为Java
如何将以下python代码转换为Java如何将python time.time()转换为Java,java,python,datetime,Java,Python,Datetime,如何将以下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();
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()有何不同?时间()的等价物是
System.currentTimeMillis()/1000.0
相当于
str(int(time.time() * 1e6))
因此
String.valueOf((int) (System.currentTimeMillis() / 1000.0) * 1e6)
可以简化为
String.valueOf(System.currentTimeMillis() * 1000)
这几乎是一样的,除了在python中得到16位数字(time.time()前10位数字+后6位数字),而在java中得到13位数字。您的等效代码是
String result = (System.currentTimeMillis() * 1000) + "";
您得到的两个值非常相似-只是表示方式不同。这主要是因为在Java版本中,您要乘以
1e6
,这是一个浮点文本,因此结果是一个双精度的
,由于其大小,它用科学符号表示。Python的数字类型更加自由,并且选择在不使用科学符号的情况下显示结果
相反,如果乘以整型文字1000000,则会得到类似于“1417515400000000”
——看起来更接近Python版本,但被截断为第二个
如果不是除以1000然后再乘以1000000,而是乘以1000,那么得到的结果更像是“1417515400105000”
。这仍然被截断为毫秒,但我怀疑你的时钟不太可能比这更精确
另一方面,我建议使用String.valueOf(x)
将非字符串类型转换为字符串,而不是使用x+“”
——它更好地描述了您正在尝试做的事情,因为您实际上根本不想执行串联。因此,我建议您的getValueFromJava
方法应该是:
public static String getFromJava() {
return String.valueOf(System.currentTimeMillis() * 1000);
}
(不清楚为什么您首先需要将其作为字符串,但这是另一回事。)您所说的“不同结果”到底是什么意思?请举例说明。还要注意,您当前的Java代码不会编译。。。给出有效的代码总是值得的,除非您试图询问编译时失败的情况。@JonSkeet我已经纠正并改进了这个问题,如果它能让您更高兴的话。但第一个答案对我来说很有用。不管怎样,谢谢。不过,公认的答案并不能解释两者之间的区别。我再补充一个答案。请阅读——仅仅因为你没有问一个像样的问题就得到了你喜欢的答案并不意味着继续这样做是个好主意。总的来说,问题越好,答案就越好。非常感谢,这真的很有用。我接受了你的回答。谢谢你问这个问题。帮了很多忙!谢谢,你的解决方案奏效了。同时,感谢你足够聪明地知道我在寻找什么,而不必担心我问题的正确性。