web-dev-qa-db-ja.com

androidのタイムスタンプを現在の日付に変換します

日付の表示に問題があり、1379487711としてタイムスタンプを取得していますが、このように実際の時間は9/18/2013 12:31:51 PMですが、17として表示されます-41-1970。現在時刻として表示する方法。

時間を表示するために、次の方法を使用しました。

private String getDate(long milliSeconds) {
    // Create a DateFormatter object for displaying date in specified
    // format.
    SimpleDateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
    // Create a calendar object that will convert the date and time value in
    // milliseconds to date.
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis((int) milliSeconds);
    return formatter.format(calendar.getTime());
} 
43
jkk
private String getDate(long time) {
    Calendar cal = Calendar.getInstance(Locale.ENGLISH);
    cal.setTimeInMillis(time * 1000);
    String date = DateFormat.format("dd-MM-yyyy", cal).toString();
    return date;
}

setTimeInMillisにintではなく長い時間を設定していることに注意してください。日付形式にはMMがあり、mmではありません(mmは分を表しますで、月ではなく、 41 "には月が必要です)

80
Lena Bru

タイムスタンプを現在の時刻に変換するため

Calendar calendar = Calendar.getInstance();
TimeZone tz = TimeZone.getDefault();
calendar.add(Calendar.MILLISECOND, tz.getOffset(calendar.getTimeInMillis()));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
Java.util.Date currenTimeZone=new Java.util.Date((long)1379487711*1000);
Toast.makeText(TimeStampChkActivity.this, sdf.format(currenTimeZone), Toast.LENGTH_SHORT).show();
10
Kaushik

タイムスタンプを現在の日付に変換します。

private Date getDate(long time) {    
    Calendar cal = Calendar.getInstance();
       TimeZone tz = cal.getTimeZone();//get your local time zone.
       SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
       sdf.setTimeZone(tz);//set time zone.
       String localTime = sdf.format(new Date(time) * 1000));
       Date date = new Date();
       try {
            date = sdf.parse(localTime);//get local date
        } catch (ParseException e) {
            e.printStackTrace();
        }
      return date;
    }
7
kyogs

結果が常に1970を返す場合、次の方法を試してください。

Calendar cal = Calendar.getInstance(Locale.ENGLISH);
cal.setTimeInMillis(timestamp * 1000L);
String date = DateFormat.format("dd-MM-yyyy hh:mm:ss", cal).toString();

TS値を1000倍する必要があります

使い方はとても簡単です。

3
Paras Andani

tl; dr

ミリ秒ではなく、1970-01-01T00:00:00Z以降の全秒数があります。

Instant
.ofEpochSecond( 1_379_487_711L )
.atZone( 
    ZoneId.of( "Africa/Tunis" ) 
)
.toLocalDate()
.format(
    DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) 
)

2013-09-18T07:01:51Z

全体の秒とミリ秒

上記のように、秒数とミリ秒数を混同しました。

Java.timeを使用する

他の回答は正しいかもしれませんが、古くなっています。そこで使用される面倒な古い日時クラスは、Java.timeクラスに取って代わられたレガシーです。 Androidについては、以下の最後の箇条書きを参照してください。

Instant クラスは、 [〜#〜] utc [〜#〜] のタイムライン上の瞬間を表します。解像度は ナノ秒 (最大9桁の小数部分) )。

Instant instant = Instant.ofEpochSecond( 1_379_487_711L ) ;

instant.toString():2013-09-18T07:01:51Z

この瞬間を表示するタイムゾーンを適用します。

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

zdt.toString():2013-09-18T03:01:51-04:00 [アメリカ/モントリオール]

目的の形式でこの値を表す文字列を生成します。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
String output = zdt.format( f ) ;

18-09-2013

この コードはIdeOne.comでライブ実行されます を参照してください。


Java.timeについて

Java.time フレームワークはJava 8以降に組み込まれています。これらのクラスは、面倒な古い legacyJava.util.Date などの日時クラスに取って代わります。 Calendar 、& SimpleDateFormat

Joda-Time プロジェクト、現在 メンテナンスモード )は、 Java.time クラスへの移行を推奨しています。

詳細については、 Oracleチュートリアル を参照してください。多くの例と説明についてはStack Overflowを検索してください。仕様は JSR 310 です。

Java.timeクラスはどこで入手できますか?

  • Java SE 8Java SE 9 、およびそれ以降
    • ビルトイン。
    • 実装がバンドルされた標準Java AP​​Iの一部。
    • Java 9は、いくつかのマイナーな機能と修正を追加します。
  • Java SE 6 および Java SE 7
    • Java.time機能の多くは、 ThreeTen-Backport のJava 6および7にバックポートされています。
  • Android

ThreeTen-Extra プロジェクトは、Java.timeを追加のクラスで拡張します。このプロジェクトは、Java.timeに将来追加される可能性のある証明の場です。ここでは、 IntervalYearWeekYearQuarter 、および more

2
Basil Bourque

私はこれをここから入手しました: http://www.Java2s.com/Code/Android/Date-Type/CreateDatefromtimestamp.htm

上記の答えはどれも私にとってはうまくいきませんでした。

Calendar c = Calendar.getInstance();
c.setTimeInMillis(Integer.parseInt(tripBookedTime) * 1000L);
Date d = c.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy");
return sdf.format(d);

ところで: ("dd-MM-yyyy", cal)はAndroid-"メソッドを解決できません"によって認識されません。

0
ekashking
  DateFormat df = new SimpleDateFormat("HH:mm", Locale.US);
  final String time_chat_s = df.format(time_stamp_value);

Time_stamp_value変数タイプはlongです

コードを使用すると、次のようになります。

private String getDate(long time_stamp_server) {

    SimpleDateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
    return formatter.format(time_stamp_server);
} 

「ミリ秒」をtime_stamp_serverに変更します。ミリ秒の名前を「c」またはよりグローバルな名前に変更することを検討してください。 「c」は、ミリ秒よりもはるかにグローバルな方法で時間とコンピューティングに関連するため、本当に優れています。したがって、変換するために必ずしもカレンダーオブジェクトが必要というわけではなく、それはそれと同じくらい簡単でなければなりません。

0
sivi

チャットメッセージをアプリのように見せたい場合は、以下の方法を使用します。必要に応じて変更する日付形式。

public String DateFunction(long timestamp, boolean isToday)
{
    String sDate="";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
    Calendar c = Calendar.getInstance();
    Date netDate = null;
    try {
        netDate = (new Date(timestamp));
        sdf.format(netDate);
        sDate = sdf.format(netDate);
        String currentDateTimeString = sdf.format(c.getTime());
        c.add(Calendar.DATE, -1);
        String yesterdayDateTimeString =  sdf.format(c.getTime());
        if(currentDateTimeString.equals(sDate) && isToday) {
            sDate = "Today";
        } else if(yesterdayDateTimeString.equals(sDate) && isToday) {
            sDate = "Yesterday";
        }
    } catch (Exception e) {
        System.err.println("There's an error in the Date!");
    }
    return sDate;
}
0
Vinod Makode