将纪元时间转换为日期字符串

nex*_*490 25 java android epoch

我已经多次看到这个问题了,没有一个答案似乎是我需要的.

我有一个长型变量,其中存储了一个纪元时间.

我想要做的是将其转换为String

例如,如果存储的纪元时间是今天的最终字符串将读取:

17/03/2012

我怎么会这样?

Rei*_*ard 34

查看SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.format(new Date(myTimeAsLong));
Run Code Online (Sandbox Code Playgroud)

  • 答案是:打印*分钟*代替*月*; 忽视文化的选择(这是非常重要的); 忽略了时区的选择(这非常重要).你真的必须考虑这些事情 - 没有帮助(IMO)只是忽略它们. (5认同)
  • @ nexus490提供的Long似乎是秒(即"真正的"纪元格式),而Date类的Java实现需要时间(以毫秒为单位).尝试将您的Long乘以1000它应该可以工作.除此之外,Jon Skeet评论的+1000. (4认同)

Jon*_*eet 23

你会创建一个Datelong-这很容易:

Date date = new Date(epochTime);
Run Code Online (Sandbox Code Playgroud)

请注意,epochTime从纪元开始应该是以毫秒为单位 - 如果你从纪元开始有,则乘以1000.

然后你创建一个SimpleDateFormat指定相关模式,文化和时区的东西.例如:

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy", Locale.US);
format.setTimeZone(...);
Run Code Online (Sandbox Code Playgroud)

然后使用它将日期格式化为字符串:

String text = format.format(date);
Run Code Online (Sandbox Code Playgroud)


Dam*_*oda 17

Date date = new Date(String); 
Run Code Online (Sandbox Code Playgroud)

这是不推荐使用的.

  Date date = new Date(1406178443 * 1000L);
  DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
  format.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
  String formatted = format.format(date);
Run Code Online (Sandbox Code Playgroud)

确保乘以1000L

  • 只是一个小评论,您需要将HH:MM:ss.SSS更改为HH:mm:ss.SSS - MM是月份,而不是分钟. (3认同)

Mar*_*ler 6

如果该方法应该是可移植的,最好使用默认值(当地时间)TimeZone.getDefault()

String epochToIso8601(long time) {
    String format = "yyyy-MM-dd HH:mm:ss";
    SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault());
    sdf.setTimeZone(TimeZone.getDefault());
    return sdf.format(new Date(time * 1000));
}
Run Code Online (Sandbox Code Playgroud)