Androidのスキルツリー - 時間依存全体的な概要

Androidの基本

Androidのスキルツリー - フラグメント全体的な概要

Androidのスキルツリー - アニメーションの概要

Androidのスキルツリー - ビューのサマリー

Androidのスキルツリー - アクティビティの概要

Androidのスキルツリー - システムイベントの概要

Androidのスキルツリー - Androidのストレージ・パスとIO操作の概要

Androidのスキルツリー - マルチプロセス関連の概要

Androidのスキルツリー - Drawableの概要

Androidのスキルツリー - 画面の適応の概要


はじめに:

、多くの開発者が時間内に時間関連の問題を行うことがわかった独自の方法でそれぞれ、その後、時間依存プロセス、さまざまなJavaは、時間に関連するクラスの知識が付属して非常に明確ではない、そして時には時間の開発にそれらを見ました、すべて使い切っている間、一時Baiduは、時間に関連する問題に対処します。

あなたに戻り、曲を依頼することになりましたシンプルな、このような長い時間を言って00:03:06、それからの秒数の合計は、あなたのコードが長く使用するために、あなたは具体的な秒にこれを入れる方法を尋ねるためにこの時間を。次のように現在のプロジェクトでは、私は、この処理のコードを見ています:

if (min.contains(":")) {
    String[] items = min.split(":");
    duration += (Integer.valueOf(items[0]) * 60 * 60 * 1000 + Integer.valueOf(items[1]) * 60 * 1000 + Integer.valueOf(items[2]) * 1000);
}
复制代码

もちろん、上記のいずれの問題もなく、コードが、実際には、我々は時間に依存するクラスで処理することができます。


本体:

1.時間の取得

今、最初に最も重要な時に取得する必要があります確かに、時間関連の知識が来ます。

1.1日付:

実際には、脳のマップを見て、それは非常に詳細されていると日付の誰もがちょうど我々が話をいくつかのポイント選び、あまりにも精通し、そうでない超詳細な説明ではないと理解している必要があります

コンストラクタ:

Date date = new Date();
// 使用 toString() 函数显示当前日期时间
date.toString();  //Sat Aug 31 15:20:08 CST 2019

Date date1 = new Date(1000); 
//1970.01.01 00:00:00开始加上你填入的数值后的时间点
date1.toString(); //Thu Jan 01 08:00:01 CST 1970
复制代码

取得/設定機能:

Date date = new Date();
//获取当前Date代表的时间距离1970.01.01 08:00:00的差值
date.getTime(); //1567576587763

Date date1 = new Date(1000); 
date1.getTime(); //1000

Date date2 = new Date();
date2.setTime(1000);
date2.getTime(); //1000
复制代码

日付2つの比較機能:

Date aaaaa = new Date(1000);
Date bbbbb = new Date(2000);

aaaaa.after(bbbbb);//false
aaaaa.before(bbbbb);//true
aaaaa.equals(bbbbb);//false
aaaaa.compareTo(bbbbb);//-1(a<b返回-1,a==b返回0,a>b返回1)
复制代码

1.2カレンダー:

私たちは、それは知っているDate(ので、時間値を表すことができDateますが、1970年1月1日午前八時00分00秒からの差分を取得し、現在知ることができるDate時間が表されています)

だから、Calendar取得方法の時に、それが戻る時間を取得するだけでなく提供しlong、それはまた、リターンを提供、メソッドの種類をDateオブジェクトのメソッドを

取得時間:

Calendar cl  = Calendar.getInstance();
Date date = cl.getTime();//获取Date对象
cl.getTimeInMillis();//直接获取long值

date.getTime() 与 cl.getTimeInMillis()的结果是一样的

复制代码

もちろん、Calendarまた、分、秒希望日などの特定の時間の特定の値を取得できます。

比如获取当前时间的小时:
Calendar cl  = Calendar.getInstance();

//比如现在是下午四点,获取到的就
cl.get(Calendar.HOUR_OF_DAY));  
是16

//'注意一点,拿到的Mouth是从0开始的,比如现在是9月,你获取的是8'
cl.get(Calendar.MONTH);  //8

复制代码

多くの特定のパラメータは、あなたが自分自身を選択することができ、があります。

時間を設定します。

それは、あなたが直接の長いタイプを設定することができます取得時間は、セットアップ時間が同じであると言う、あなたもあなたも、Date型をすることができます設定し、直接、特定の日付フィールドの値を設定することができます。

public final void setTime(Date date)
public void setTimeInMillis(long millis)

public void set(int field, int value)
public final void set(int year, int month, int date)
public final void set(int year, int month, int date, int hourOfDay, int minute)
public final void set(int year, int month, int date, int hourOfDay, int minute,int second)
复制代码

オブジェクト比較は、2つのカレンダー:比較前の2つのDateオブジェクトを参照することができ、我々はここに住むません。


実際には、我々は以前に述べた、DateCalendarすべての非常に精通しているタイプ、またほとんどを使用しますが、非友好的な方法を使用するので、java8後ので、新規作成して戻ってInstantLocalxxxx、一連置き換えるために使用DateしてCalendarのクラスを。

1.3インスタント:

多くの人々は、言うDate私は十分に良い感じ、非常に良い使用ではありません。私はあなたが現在の時刻を取得し、その後、6時間に基づいて追加し、時間を模索する必要がある場合は、少し不便を見つけるでしょう。

Date dd1 = new Date();
dd1.setTime(dd1.getTime()+6*60*60*1000);

//'当前有些人会说Date不是有个setHours()方法吗?但实际已经标记抛弃了'
复制代码

私たちは、見てInstantの使用:

Instant i = Instant.now();

i.toString(); //2019-09-04T09:44:07.169Z

Instant i2 = i.plus(6,ChronoUnit.HOURS);//加了6个小时
i2.toString(); //2019-09-04T15:44:07.169Z

//也可以通过Duration类辅助 ('Duration类后面会讲到')
Instant i3 =  i.plus(Duration.ofHours(6));
i3.toString(); //2019-09-04T15:44:07.169Z

//也可以通过TimeUnit辅助类('TimeUnit类后面会讲到')
Instant i4 = i.plusMillis(TimeUnit.HOURS.toMillis(6));
i4.toString(); ////2019-09-04T15:44:07.169Z

//'减少则使用minus方法,使用方式同plus'

复制代码

インスタントオブジェクトを関連する2つの方法の比較、および日付のように:

ここでは主に約あるuntil方法:

Instant i = Instant.now();
Instant i2 = i.plus(6,ChronoUnit.HOURS);

i2.until(i,ChronoUnit.HOURS); //-6
i.until(i2,ChronoUnit.HOURS); //6

'(i2.until(i,ChronoUnit.HOURS);
i2到i1,说明要回到以前,当然是要减少6个小时,反之亦然)'
复制代码

PS:Instant.now();私たちの時間を取得する時間は、中国の現在の8時間よりも遅くなり、私たちは下の注意を払う必要があります

1.4 LocalXXXXXシリーズ

ローカルシリーズはLocalTime、次のとおりですLocalDateLocalDateTime

:それは意味純粋にリテラルから見ることができますLocalTime時間(分、秒)で、LocalDateそれは、日付(日付)でLocalDateTime全体の完全な日付(日、時間- - -日付時刻)

1.4.1 LOCALDATE:

上記のように、図の脳の基本的な方法は、また、一般的な方法があります。

ここでのポイントに言及:

Calendar今月から取得した0など、今のように、初め9月份、あなたは数字があり得ます8しかし、localDate.getMonthValue()それに着きます9よりフィット感の現実。

1.4.2にLocalTime:

LocalTime図の脳への上記の方法は、また、一般的な方法を持っています。

1.4.3 localdatetiへ:

LocalDateTime = LocalDate + LocalTime

LocalDate.atTime()方法添加时间
返回的结果对象同时变为LocalDateTime对象

LocalTime.atDate()方法添加日期
返回的结果对象同时变为LocalDateTime对象
复制代码

LocalDateTime使用とLocalTimeし、LocalDate同法の基本的な使用。

1.4.4 ZoneDateTime:

そして、のLocalDateTimeは基本的に同じことが、文字通り、我々はまた、タイムゾーンに関連していることを知っている参照してください。

LocalDateTime.now(); 
//2019-09-05T22:49:06.369

ZoneDateTime.now();
//2019-09-05T22:49:06.371+08:00[Asia/Shanghai]

复制代码

私たちは、現在のタイムゾーンを参照してください基本的に同じである他の方法を使用することができます。


2.時間形式

我々はすでに時間を取得する方法を述べています。次回我々はフォーマットおよびその他の文字列変換のさまざまなについて話しています。

  1. :しかし、我々は、我々は異なるテキストを画面に表示することを知って2018-08-07 09:12:122018#08#07#09#12#12さまざまな方法で、これは文字列表示にオンにする時間です。

  2. その後、他の誰かがあなたを渡す場合2018-08-07 09:12:12、および2018#08#07#09#12#12時刻オブジェクトに文字列を変換したいです。

2.1にDateFormat:

DateFormat日付/時刻言語に依存しない方法で日付または時刻をフォーマットおよび解析する抽象クラスのサブクラスをフォーマットします。日付/時刻フォーマットサブクラス(例えばSimpleDateFormat)許可フォーマット(すなわち日付- >テキスト)、解析(テキスト- >日付)、および標準化。日付をDateオブジェクトとして、またはこの瞬間から始まるミリ秒GMT(グリニッジ標準時)1970年1月1日0時00分00秒数で表されます。

2.1.1時間と文字列Huzhuan:

DateFormatこれは、任意の日付形式とロケールを解決するのに役立ちます。月、週、あるいはカレンダー形式(太陰及び太陽カレンダー)のために、コードは、ロケールの慣習とは完全に独立であることができます。

現在のロケールでの日付の書式を設定するには、静的なファクトリメソッドを使用することができます。

myString = DateFormat.getDateInstance().format(myDate);
复制代码

複数の日付フォーマットの場合、フォーマットの取得及びシステムを繰り返し、環境、言語や慣習の国/地域についての情報を取得する必要がないように、それは、練習の何倍もより効率的に使用することです。

DateFormat df = DateFormat.getDateInstance();
for (int i = 0; i < myDate.length; ++i) {
    output.println(df.format(myDate[i]) + "; ");
}
复制代码

別のロケールで日付をフォーマットするために、それはコールgetDateInstance()内で指定することができます。

DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
复制代码

また、使用することができますDateFormat解決のために。

myDate = df.parse(myString);
复制代码

2.1.2 DateFormatオブジェクトを取得します。

使用しgetDateInstanceている国/地域の標準的な日付形式を取得します。また、いくつかの他の静的ファクトリメソッドを提供します。使用しgetTimeInstanceている国/地域利用可能な時間形式を。使用すると、getDateTimeInstance日付と時刻の形式を得ることができます。別のオプションは、(からの結果の長さを制御するためにファクトリメソッドに渡すことができるSHORTまでMEDIUMLONG、次にFULL)。正確な結果はロケールに依存しますが、一般的に:

SHORT 完全为数字,如 12.13.52 或 3:30pm
MEDIUM 较长,如 Jan 12, 1952
LONG 更长,如 January 12, 1952 或 3:30:32pm
FULL 是完全指定,如 Tuesday、April 12、1952 AD 或 3:30:42pm PST。
复制代码

ご希望の場合は、形式上のタイムゾーンを設定することができます。あなたはより多くの制御フォーマットを発揮するか、パース(またはユーザーがより多くの制御を与える)したい場合は、この方法は、植物のキャストのSimpleDateFormatから取得したDateFormatを試みることができます。これは、国/地域のほとんどに適用され、ちょうどあなたが特定の形式が発生した場合にはtryブロックに入れることを忘れないでください。あなたも徐々に文字列を解析するために、フォームと持つParsePositionのFieldPosition構文解析と書式設定方法の様々な部分で使用することができます。任意の特定のフィールドを合わせ、または画面上の文字列の選択位置を見つけること。フォーマットは同期化されていない日付を同期します。これは、スレッドごとに別々の形式のインスタンスを作成することをお勧めします。複数のスレッドがフォーマットにアクセスする場合は、外部同期させる必要があります。

2.2のSimpleDateFormat:

SimpleDateFormatそれはDateFormat、サブクラスなので、目の前DateFormatの基本的な知識の導入は、基本的にはまったく同じ。ここでは説明されていません。

このクラスは、我々はすべての99.9999パーセントを使用し、使用する方法を知っていると推定されています。

次のコードは、基本的な使い方は最高です。


Date date = new Date();
String strDateFormat = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);

//时间转换为字符串
sdf.format(date); //2019-09-06 21:13:23


String str = "2019-09-06 21:13:23";
//字符串转换为时间
Date date = sdf.parse(str);  

复制代码

不慣れではなく、法の主な用途は、常に正確に定義されたフォーマットを覚えています:

字母	日期或时间元素	表示	示例
G	Era 标志符	Text	AD
y	年	Year	1996; 96
M	年中的月份	Month	July; Jul; 07
w	年中的周数	Number	27
W	月份中的周数	Number	2
D	年中的天数	Number	189
d	月份中的天数	Number	10
F	月份中的星期	Number	2
E	星期中的天数	Text	Tuesday; Tue
a	Am/pm 标记	Text	PM
H	一天中的小时数(0-23)	Number	0
k	一天中的小时数(1-24)	Number	24
K	am/pm 中的小时数(0-11)	Number	0
h	am/pm 中的小时数(1-12)	Number	12
m	小时中的分钟数	Number	30
s	分钟中的秒数	Number	55
S	毫秒数	Number	978
z	时区	General time zone	Pacific Standard Time; PST; GMT-08:00
Z	时区	RFC 822 time zone	-0800
复制代码

2.3てDateTimeFormatter:

これはJava8は変換クラスを使用することをお勧めです。

2.3.1変換時間Stringオブジェクト:

// 定义一个任意格式的日期时间字符串
String str1 = "2014==04==12 01时06分09秒";
// 根据需要解析的日期、时间字符串定义解析所用的格式器
DateTimeFormatter fomatter1 = DateTimeFormatter.ofPattern("yyyy==MM==dd HH时mm分ss秒");
// 执行解析
LocalDateTime dt1 = LocalDateTime.parse(str1, fomatter1);

// ---下面代码再次解析另一个字符串---
String str2 = "2014$$$四月$$$13 20小时";
DateTimeFormatter fomatter2 = DateTimeFormatter.ofPattern("yyy$$$MMM$$$dd HH小时");
LocalDateTime dt2 = LocalDateTime.parse(str2, fomatter2);
复制代码

ここで使用し、SimpleDateFormat基本的には同じ。

2.3.2:タイムStringオブジェクトの変換:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy==MM==dd HH时mm分ss秒");

//'1. 和SimpleDateFormat的使用方法一样,把时间对象作为参数传入'
formatter.format(LocalDateTime.now());

//'2. 把DateTimeFormatter作为参数传入'
LocalDateTime.now().format(formatter);
复制代码

3.時間クラス

時間の3.1比較:

私たちは、主に二つの日付は、オブジェクトの直接の違いを見ることができます:の日付Periodクラスと第二Durationクラスを。

3.2時間のヘルパークラス:

3.2.1 TIMEUNIT:

時間粒度変換:

例えば、私が数秒間がN時間Mの分をカウントしたい、多くの人はそう書くことができます。

N* 60 * 60 + M * 60;
复制代码

実際ではTimeUnitこのクラス、時間の異なる変換器の多くは非常に便利です。

TimeUnit.HOURS.toSeconds(N) + TimeUnit.MINUTES.toSeconds(M);
复制代码

など、特にミリ秒単位の面で他には、一般的な乗算、0の複数を使用して、非常に便利TimeUnitでと、間違えやすいです。

TimeUnit.HOURS.toMillis(N) + TimeUnit.MINUTES.toMillis(M);
复制代码
//把3天转化成小时
TimeUnit.HOURS.convert( 3 , TimeUnit.DAYS );
//结果是:72
复制代码

遅延:

これに加えて、TimeUnitあなたはまた、スレッドのスリープを使用することができます。

ほとんどの人が睡眠にスレッドを記述します。

Thread.sleep( 5 * 1000 );
复制代码

使用TimeUnit

TimeUnit.SECONDS.sleep( 5 );
复制代码

そこtimeJoin/timeWaitに、彼らは同じようです。


結論:

戻る最初の質問に、私たちは歌を言及始めたときは長くなります。

また、これらのツールを使って自分の時間をもたらすことができます(と私は2つはもちろん、書かれた他がある、書かれた引用することができます:)

String str = "00:03:06";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime localTime = LocalTime.parse(str, formatter);
localTime.toSecondOfDay();//186


String str1 = "00:00:00";
LocalTime time1 = LocalTime.parse(str1);
String str2 = "00:03:06";
LocalTime time2 = LocalTime.parse(str2);
Duration duration =  Duration.between(time1,time2);
duration.getSeconds(); //186

复制代码

記事を更新しない怠け者である.........間違って、ああ指摘してください。

おすすめ

転載: juejin.im/post/5d69f643f265da039e12d317