将时间从API转换为人类可读的

时间:2018-03-31 19:34:40

标签: android android-api-levels

当我获取地震的时间时,我正在使用地震API,它不是人类可读的,如下所示。

API的时间是Long格式,我想在listview中显示为00/00/0000

这是我从API中获取时间和更多数据的方法:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        l=(ListView)findViewById(R.id.list_id);
        queue= Volley.newRequestQueue(this);
        request();
        l.setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
              ApiClass apiClass=list.get(position);
               Uri uri=Uri.parse(apiClass.getUrl());
               Intent intent=new Intent(Intent.ACTION_VIEW,uri);
               startActivity(intent);
              }
          });

    }


                   @Override
                   public void onResponse(String response) {

                       try {
                           JSONObject ob1=new JSONObject(response);
                           JSONArray ob2=ob1.getJSONArray("features");
                           for (int i=0;i<ob2.length();i++){
                               JSONObject ob3=ob2.getJSONObject(i);
                               JSONObject ob4=ob3.getJSONObject("properties");

                               String title=ob4.getString("title");
                               Double mag=ob4.getDouble("mag");
                               Long time=ob4.getLong("time");
                               String u=ob4.getString("url");

                               list.add(new ApiClass(title,mag,time,u));

                           }
                           CustomAdapter adapter=new CustomAdapter(MainActivity.this,list);
                           l.setAdapter(adapter);
                       }
                       catch (JSONException e) {
                           e.printStackTrace();
                       }

                       // Display the first 500 characters of the response string.
                   }
               }, new Response.ErrorListener() {
           @Override
               public void onErrorResponse(VolleyError error) {
               Toast.makeText(MainActivity.this,"Error",Toast.LENGTH_SHORT).show();
           }
       });

       queue.add(stringRequest);
     }
}

以下是我的自定义适配器java类:

    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View v=convertView;
           if(convertView==null){
               v= LayoutInflater.from(c).inflate(R.layout.custom_layout,parent,false);
           }
           ApiClass ob=(ApiClass) arrayList.get(position);
        CircleImageView image=v.findViewById(R.id.image_id);
        TextView tv1=v.findViewById(R.id.title_id);
        TextView tv2=v.findViewById(R.id.magnitude_id);
        TextView tv3=v.findViewById(R.id.time_id);
        tv1.setText(ob.getTitle().toString());
        tv2.setText(ob.getMag().toString());
        tv3.setText(ob.getTime().toString());
        image.setImageResource(R.drawable.mouse);

        return v;
    }

这是我的Apiclass,它在listview中返回值设置值:

    public ApiClass(String title, Double mag, Long time, String url) {
        this.title = title;
        this.mag = mag;
        this.time = time;
        this.url = url;
    }

    public String getTitle() {
        return title;
    }

    public Double getMag() {

        return mag;
    }

    public Long getTime() {

        return  time;
    }

    public String getUrl() {
        return url;
    }

}

3 个答案:

答案 0 :(得分:0)

将长时间戳转换为Date对象

Date date = new Date(long)

然后使用java提供的SimpleDateFormat API将时间转换为您想要的格式, 例如,获取 2018-Mar-1

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MMM-d")
String date = sdf.format(date) // date object created above

答案 1 :(得分:0)

TL;博士

Instant.ofEpochMilli( 1_737_394_537_378L  )
  

2025-01-20T17:35:37.378Z

java.time

现代方法使用 java.time 类。

自UTC 1970年第一时刻1970-01-01T00:00Z以来,您显然拥有毫秒数。

Instant instant =  Instant.ofEpochMilli( 1_737_394_537_378L  ) ;

以标准ISO 8601格式生成字符串。

String output = instant.toString() ;
  

2025-01-20T17:35:37.378Z

对于其他格式,请使用DateTimeFormatter。搜索Stack Overflow已经发布了许多示例和讨论。

要查看某个地区的人们使用的挂钟时间,请使用时区。

ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

关于 java.time

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

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

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

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

答案 2 :(得分:-1)

这对我有用:

   private String getDate(long time){
    SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
    String dateString = formatter.format(new Date(time));
    String date = ""+dateString;
    return date;
}