gpt4 book ai didi

java - 将文件最后一次修改的时间返回到 Stata

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:46 27 4
gpt4 key购买 nike

我是 Stata 用户,正在尝试使用 Stata 的 Java API .我想使用 Java 将文件的最后修改时间返回给 Stata。但是,我认为我遇到了时区问题。

非 Stata 用户的 Stata 时间背景知识:时间用自 1960 年 1 月 1 日 00:00:00.000 以来的毫秒数表示。 Stata 没有时区,所以我希望 Java 函数的返回值是 self 所在时区(美国/纽约)1960 年 1 月 1 日午夜以来的毫秒数。

这是我对 Java 函数的尝试(如果有帮助,我可以完整地发布它):

import com.stata.sfi.*;
// Other imports

public class SFileAttribs
{
// Syntax: lastModified(String filename, String scalar_name)
// Stores in the Stata scalar scalar_name the time of last
// modification of filename.
public static int lastModified(String[] args)
{
// Code here...

// Get the time.
FileTime time;
try {
time = (FileTime) Files.getAttribute(path, "lastModifiedTime");
}
catch (IOException e) {
SFIToolkit.errorln("file I/O error on read");
return(692);
/*NOTREACHED*/
}

// Store the time in the scalar.
Calendar cal1960 = Calendar.getInstance();
cal1960.set(1960, 0, 1, 0, 0, 0);
cal1960.set(Calendar.MILLISECOND, 0);
Scalar.setValue(args[1], time.toMillis() - cal1960.getTimeInMillis());

return(0);
}
}

回到 Stata,我运行这个命令:

// Calls SFileAttribs.lastModified("Test.txt", "filetime").
javacall SFileAttribs lastModified, args("Test.txt" "filetime")

但是,结果比应该的早了一个小时:

. display %tc filetime
24oct2013 12:54:36

我所在时区的最后修改时间是13:54,而不是12:54

我真的在这方面苦苦挣扎,如果有任何建议,我将不胜感激。


编辑:

考虑到我来自一种没有时区的语言,也许可以预见,我想我搞砸了夏令时。在我的时区,现在是 DST,但在 1960 年 1 月 1 日 的同一时区,它不是 DST。我需要考虑到这一点:

// Store the time in the scalar.
Calendar now = Calendar.getInstance();
Calendar cal1960 = Calendar.getInstance();
cal1960.set(1960, 0, 1, 0, 0, 0);
cal1960.set(Calendar.MILLISECOND, 0);
int dstHour = (cal1960.getTimeZone().inDaylightTime(cal1960.getTime()) ? 1 : 0) -
(now.getTimeZone().inDaylightTime(now.getTime()) ? 1 : 0);
cal1960.set(Calendar.HOUR, dstHour);
Scalar.setValue(args[1], time.toMillis() - cal1960.getTimeInMillis());

有更简单的方法吗?

最佳答案

community-contributed 命令 filesys 是最简单的方法来做你想做的事:

. findfile auto.dta
. filesys `r(fn)', attributes

. return list

macros:
(some output omitted)

r(accessednum) : "1871843910000"
r(modifiednum) : "1745362526000"
r(creatednum) : "1745362526000"
r(accessed) : "25apr2019 20:38:30"
r(modified) : "22apr2015 22:55:26"
r(created) : "22apr2015 22:55:26"

. display %tcHH:MM `r(modifiednum)'
22:55

您可以使用以下命令安装 filesys 命令社区贡献命令github:

. net install github, from("https://haghish.github.io/github/")
. github install wbuchanan/StataFileSystem

关于java - 将文件最后一次修改的时间返回到 Stata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19573203/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com