如何将时间从unix时间戳转换为工作日?例如,我想将1493193408
转换为Wednesday
。
我尝试了上面的代码,但它始终显示Sunday
..
SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date dateFormat = new java.util.Date(1493193408);
String weekday = sdf.format(dateFormat );
答案 0 :(得分:3)
你需要将它乘以1000,因为Java和Unix的时间不一样。
SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date dateFormat = new java.util.Date(1493193408L * 1000);
String weekday = sdf.format(dateFormat );
答案 1 :(得分:2)
您可以使用日历实例,因为它为您提供了获取该信息的方法:
Date date = new Date(1493193408000L);
Calendar c = Calendar.getInstance();
c.setTime(date);
System.out.println(c.get(Calendar.DAY_OF_WEEK));
System.out.println(c.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.US));
答案 2 :(得分:2)
Date
构造函数具有以下描述:
分配Date对象并初始化它以表示指定的对象 数字毫秒,因为标准基准时间称为" 时代",即1970年1月1日00:00:00 GMT。
您的时间戳以秒为单位,如果乘以1000(达到毫秒),您将得到预期答案:
SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date dateFormat = new java.util.Date(1493193408000L);
System.out.println(dateFormat);
String weekday = sdf.format(dateFormat);
System.out.println(weekday);
打印
Wed Apr 26 09:56:48 CEST 2017
Wednesday
答案 3 :(得分:2)
其他答案使用麻烦的旧日期时间类,现在是旧的,由java.time类取代。
时区对于确定日期至关重要,因此需要获得星期几。
从UTC自1970年代以来的秒数中获取瞬间。应用时区以获取ZonedDateTime。从那里提取一个DayOfWeek枚举对象。要求该对象自动本地化以生成其名称的字符串。
Instant.ofEpochSecond( 1_493_193_408L )
.atZone( ZoneId.of( "America/Montreal" ))
.getDayOfWeek()
.getDisplayName( TextStyle.FULL , Locale.US )
对于Android,请参阅ThreeTenABP项目以获取大多数java.time功能的后端。
答案 4 :(得分:1)
dateFormatStart!= dateFormat
您还可以使用以下方式查看:
SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date dateFormat = new Date(System.currentTimeMillis());
String weekday = sdf.format(dateFormat);
答案 5 :(得分:1)
这是适合您的代码:
SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date dateFormat = new java.util.Date(1493193408 * 1000);
String weekday = sdf.format(dateFormat );
的文档
答案 6 :(得分:1)
您可以对新的JDK 8日期时间类执行相同的操作。使用Unix Epoch中的秒计算本地日期和时间,然后可以使用特定模式对其进行格式化。转换为日期时间也考虑了区域,我使用了默认区域,但可以修改它以使用特定区域。
ZonedDateTime ldt = ZonedDateTime.ofInstant(Instant.ofEpochSecond(1493193408), ZoneId.systemDefault());
System.out.println(ldt.format(DateTimeFormatter.ofPattern("EEEE")));
答案 7 :(得分:0)
已经说过了:你的问题是你的数字是秒,因为当它预期毫秒数时,它会在Date
之前进入java.time
人们原本期望乘以1000变得简单,但其他几个答案却让这部分错了。)
如果您要在应用中使用日期,时间或工作日,我同意建议您考虑SimpleDateFormat
中较新课程的答案。他们使用起来更好。您的代码将更直接地表达您的意图。
但是如果你只需要工作日,那么依赖第三方库可能会有点过分。不过,我仍然建议与旧式课程Date
,Calendar
和 String weekday = String.format(Locale.ENGLISH, "%tA", 1493193408 * 1000L);
保持距离。有第三种选择吗?肯定有!一个简单的oneliner,甚至:
Wednesday
根据需要产生classpath 'com.android.tools.build:gradle:2.3.1'
。但是,您仍然必须知道结果取决于计算机的时区设置。