亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 00:00:00 am android 中獲取一周第一天的開始時間

在 00:00:00 am android 中獲取一周第一天的開始時間

慕碼人8056858 2022-08-17 21:25:59
嘿,伙計們,我使用Android時間來獲取我的健康數據,我得到了周和月的第一個日期,但我沒有得到一天的開始時間,我得到這樣的輸出start: Thu, 1 Feb 2019 18:30:00 UTC 6:30 pm  EndSun, 31 Mar 2019 12:47:15 UTC 12:47 pm我想把時間花在enter code herestart: Thu, 1 Feb 2019 00:00:00 UTC 00:00 pm  End Sun, 31 Mar 2019 23:59:59 UTC 11:59 pmim使用該函數來獲取一周和一個月中的時間public static long getStartTimeOfWeek() {        Calendar cal = Calendar.getInstance();        cal.set(Calendar.HOUR_OF_DAY, 0);        cal.set(Calendar.MINUTE, 0);        cal.set(Calendar.SECOND, 0);        cal.set(Calendar.MILLISECOND, 0);        cal.set(Calendar.DAY_OF_WEEK, 1);        return  cal.getTimeInMillis()+ ONE_DAY;    }月份 :public static long getMonthDateFirstdate(){        Calendar cal = Calendar.getInstance();        cal.clear(Calendar.MINUTE);        cal.clear(Calendar.SECOND);        cal.clear(Calendar.MILLISECOND);        cal.set(Calendar.DATE,cal.getActualMinimum(Calendar.DAY_OF_MONTH));        return cal.getTimeInMillis();    }
查看完整描述

3 回答

?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

Try SimpleDateFormat sdf = new SimpleDateFormat(“dd-MM-yyyy hh:mm:ss”)


查看完整回答
反對 回復 2022-08-17
?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

java.time

我建議使用以下兩種方法的實現。


public static long getStartTimeOfWeek() {

    WeekFields wf = WeekFields.of(Locale.getDefault());

    return LocalDate.now(ZoneOffset.UTC)

            .with(wf.dayOfWeek(), 1)

            .atStartOfDay(ZoneOffset.UTC)

            .toInstant()

            .toEpochMilli();

}


public static long getMonthDateFirstdate(){

    return YearMonth.now(ZoneOffset.UTC)

            .atDay(1)

            .atStartOfDay(ZoneOffset.UTC)

            .toInstant()

            .toEpochMilli();

}

要試用它們,


    System.out.println(Instant.ofEpochMilli(getStartTimeOfWeek()));

    System.out.println(Instant.ofEpochMilli(getMonthDateFirstdate()));

當我剛才在計算機上運行這兩行時,我得到了:


2019-03-18T00:00:00Z

2019-03-01T00:00:00Z

由于您的預期和觀察到的輸出都提到了UTC,因此我假設您希望使用UTC進行操作。由于星期一是我所在地區一周的第一天,因此我在第一行中得到了3月18日星期一。

我建議你避免上課。該類設計不佳,并且早已過時,因此對于像您這樣的不太平凡的日期和時間操作來說,這是一個糟糕的工具。相反,我使用的是java.time,即現代Java日期和時間API。它對你正在做的事情有更好的支持,而且通常也更適合使用。Calendar

您的代碼中出了什么問題?

我們并不完全清楚為什么你會得到你得到的結果,因為你沒有提供一個完整的例子,因為你的代碼的行為取決于時區和區域設置。潛在問題包括:

  • 您得到的一個可能的解釋是,您在UTC偏移量+05:30的時區運行代碼,例如亞洲/加爾各答或亞洲/科倫坡。在這個時區,您已經開始了新的一天。它與 UTC 時間前一天的 18:30 相同。18:30:00 UTC 6:30 pm

  • 12:47:15 UTC 12:47 pm看起來很奇怪。它可能來自您的常量具有不正確的值。ONE_DAY

  • cal.set(Calendar.DAY_OF_WEEK, 1);將星期幾設置為 1 = 星期日(如果我沒記錯這些常量,我永遠無法確定),但在某些區域設置中,將選擇上一個星期日,在其他語言環境中,將選擇下一個星期日,而在其他區域設置中,它將隨當前星期天而變化。

  • 似乎在你忘了設置一天中的小時數。很容易忘記類,你必須單獨設置每個字段(很高興你記得毫秒,許多人忘記了那些)。getMonthDateFirstdateCalendar

  • 使用半開間隔。與其希望結束時間,不如將其設置為開放終結點并將其用作開放終結點,也就是說,您的間隔是從開始時間(包括)到結束時間(不含))。因此,這意味著只有當時間點嚴格早于結束時間時,它才在區間內。Sun, 31 Mar 2019 23:59:59 UTC 11:59 pmMon, 01 Apr 2019 00:00:00 UTC 12:00 am

問:我可以在 Android API 級別 20 上使用 java.time 嗎?

是的,在較舊和較新的Android設備上運行良好。它只需要至少Java 6。java.time

  • 在Java 8及更高版本以及新的Android設備上(我被告知,從API級別26開始),新的API是內置的。

  • 在Java 6和7中,獲得ThreeTen Backport,即新類的向后移植(ThreeTen for JSR 310,其中首次描述了現代API)。

  • 在(較舊的)Android上,使用Android版本的ThreeTen Backport。它被稱為ThreeTenABP。確保從包和子包中導入日期和時間類。org.threeten.bp


查看完整回答
反對 回復 2022-08-17
?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

試試這個:


Date date = new Date();

Calendar cal = Calendar.getInstance();

    cal.setTime(date);

    cal.set(Calendar.HOUR_OF_DAY, 0);

    cal.set(Calendar.MINUTE, 0);

    cal.set(Calendar.SECOND, 0);

    cal.set(Calendar.MILLISECOND, 0);

    cal.set(Calendar.DAY_OF_WEEK, 1);


    return  cal.getTimeInMillis()+ ONE_DAY;


查看完整回答
反對 回復 2022-08-17
  • 3 回答
  • 0 關注
  • 239 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號