如何获取当天的时间,星期几和月份与android中的短信查询分开

时间:2015-09-09 07:27:43

标签: java android

我从sms表中提取日期字段,该日期字段返回日期作为时间戳, 但我希望从时间戳中分别提取

  • 一天中的时间,
  • 星期几和
  • 一年中的一个月

我已经阅读了类似的问题,但没有人可以提供帮助。

    String date = cursor.getString(cursor.getColumnIndex("date"));
    Long timestamp = Long.parseLong(date);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(timestamp);
    Date finaldate = calendar.getTime();
    String smsDate = finaldate.toString();
    dateTextView.setText(smsDate);

4 个答案:

答案 0 :(得分:3)

int day= calendar.get(Calendar.DAY_OF_WEEK));
int month = calendar.get(Calendar.MONTH);

如果您想拥有月份和日期的实际字符串值,可以使用开关来执行此操作

尝试以下方法,

String dayAsString = calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());

String monthAsString = calendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());

编辑:

    int hour12 = calendar.get(Calendar.HOUR); // 12
    int hour24 = calendar.get(Calendar.HOUR_OF_DAY); //24

答案 1 :(得分:0)

你可以做calendar.MONTH,calendar.DAY等。

答案 2 :(得分:0)

你应该使用Joda Time:

http://www.joda.org/joda-time/

String date = cursor.getString(cursor.getColumnIndex("date"));
Long timestamp = Long.parseLong(date);
DateTime dateTime = new DateTime(timestamp);
int dayOfWeek = dateTime.getDayOfWeek();
int monthOfYear = dateTime1.getMonthOfYear();

答案 3 :(得分:0)

TL;博士

Instant.ofEpochMilli( myCountOfMillis )                       // Parse a count of milliseconds since first moment of 1970 in UTC.
    .atZone( ZoneId.of( "Pacific/Auckland" ) )                // Instantiate a `ZonedDateTime` object, having adjusted from UTC into a particular time zone.
    .getDayOfWeek()                                           // Extract a `DayOfWeek` enum object.
    .getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH )  // Or Locale.US, Locale.ITALY, etc. to determine human language and cultural norms in generating a localized string to represent this day-of-week.
  

Lundi将军

java.time

现代方法使用 java.time 类。

假设你的长整数是自1970年第一时刻的纪元参考以来,在UTC,1970-01-01T00:00Z中的毫秒数,则实例化InstantInstant类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。

Instant instant = Instant.ofEpochMilli( myCountOfMillis ) ;

时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。

如果未指定时区,则JVM会隐式应用其当前的默认时区。该默认值可能随时更改,因此您的结果可能会有所不同。最好明确指定您期望/预期的时区作为参数。

continent/region的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用诸如ESTIST之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;  

将所需/预期时区应用到Instant以获得ZonedDateTime。同一时刻,时间轴上的相同点,但具有不同的挂钟时间。

ZonedDateTime zdt = instant.atZone( z ) ;

现在,您可以查询月份,星期几和时间的各个部分。

Month month = zdt.getMonth() ;                   // Get a `Month` enum object.
int m = zdt.getMonthValue() ;                    // Get an integer 1-12 for January-December.

DayOfWeek dow = zdt.getDayOfWeek() ;             // Get a `DayOfWeek` enum object.
int dowNumber = zdt.getDayOfWeek().getValue() ;  // Get a number for the day-of-week, 1-7 for Monday-Sunday per ISO 8601 standard.
String dowName = zdt.getDayOfWeek().getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;  // Generate a localized string representing the name of this day-of-week.

LocalTime lt = zdt.toLocalTime() ;               // Get a time-of-day object, without date, without time zone.

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore