将unix时间转换为工作日

时间:2017-04-28 09:00:41

标签: java android datetime

如何将时间从unix时间戳转换为工作日?例如,我想将1493193408转换为Wednesday

我尝试了上面的代码,但它始终显示Sunday ..

SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date dateFormat = new java.util.Date(1493193408);
String weekday = sdf.format(dateFormat );

8 个答案:

答案 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

其他答案使用麻烦的旧日期时间类,现在是旧的,由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 );

Java date

的文档

答案 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中较新课程的答案。他们使用起来更好。您的代码将更直接地表达您的意图。

但是如果你只需要工作日,那么依赖第三方库可能会有点过分。不过,我仍然建议与旧式课程DateCalendar String weekday = String.format(Locale.ENGLISH, "%tA", 1493193408 * 1000L); 保持距离。有第三种选择吗?肯定有!一个简单的oneliner,甚至:

Wednesday

根据需要产生classpath 'com.android.tools.build:gradle:2.3.1' 。但是,您仍然必须知道结果取决于计算机的时区设置。