日付2014-02-11の日付オブジェクトが必要です。このように直接作成することはできませんが、
Date myDate = new Date(2014, 02, 11);
だから私は次のようにやっています、
Calendar myCalendar = new GregorianCalendar(2014, 2, 11);
Date myDate = myCalendar.getTime();
Javaで日付オブジェクトを作成する簡単な方法はありますか?
日付2014-02-11の日付オブジェクトが必要です。このように直接作成することはできませんが、
Date myDate = new Date(2014, 02, 11);
だから私は次のようにやっています、
Calendar myCalendar = new GregorianCalendar(2014, 2, 11);
Date myDate = myCalendar.getTime();
Javaで日付オブジェクトを作成する簡単な方法はありますか?
Date myDate = new GregorianCalendar(2014, 2, 11).getTime();
?
02
。Javaでは、これは10進数(基数10)ではなく8進数(基数8)を意味します。
java.util.Date
、java.util.Calendar
とjava.text.SimpleDateFormat
今のレガシーに取って代わられ、java.timeのJavaの8に、後に内蔵されたクラス。Oracleによるチュートリアルを参照してください。
回答:
落とし穴:月として2を渡すと、予期しない結果が生じる可能性があります。CalendarAPIでは、月はゼロベースです。2は実際には3月を意味します。
カレンダーの使い方はもう十分簡単だと思うので、あなたが探している「簡単な」方法が何であるかわかりません。
月には正しい定数を使用することを忘れないでください。
Date date = new GregorianCalendar(2014, Calendar.FEBRUARY, 11).getTime();
別の方法は、DateFormatを利用することです。これは、通常、次のようなユーティリティを使用しています。
public static Date parseDate(String date) {
try {
return new SimpleDateFormat("yyyy-MM-dd").parse(date);
} catch (ParseException e) {
return null;
}
}
簡単に書けるように
Date myDate = parseDate("2014-02-14");
私が好むさらに別の選択肢:Java Date / Calendarをもう使用しないでください。JODATimeまたはJavaTime(別名JSR310、JDK 8以降で使用可能)に切り替えます。LocalDate
日付を表すために使用できます。これは、次の方法で簡単に作成できます。
LocalDate myDate =LocalDate.parse("2014-02-14");
// or
LocalDate myDate2 = new LocalDate(2014, 2, 14);
// or, in JDK 8+ Time
LocalDate myDate3 = LocalDate.of(2014, 2, 14);
return new SimpleDateFormat("yyyy-mm-dd").parse(date)
あるべきreturn new SimpleDateFormat("yyyy-MM-dd").parse(date)
LocalDate.of( 2014 , 2 , 11 )
ひどい古いjava.util.Date
クラスを使用することを主張する場合は、最新のjava.timeクラスから変換してください。
java.util.Date // Terrible old legacy class, avoid using. Represents a moment in UTC.
.from( // New conversion method added to old classes for converting between legacy classes and modern classes.
LocalDate // Represents a date-only value, without time-of-day and without time zone.
.of( 2014 , 2 , 11 ) // Specify year-month-day. Notice sane counting, unlike legacy classes: 2014 means year 2014, 1-12 for Jan-Dec.
.atStartOfDay( // Let java.time determine first moment of the day. May *not* start at 00:00:00 because of anomalies such as Daylight Saving Time (DST).
ZoneId.of( "Africa/Tunis" ) // Specify time zone as `Continent/Region`, never the 3-4 letter pseudo-zones like `PST`, `EST`, or `IST`.
) // Returns a `ZonedDateTime`.
.toInstant() // Adjust from zone to UTC. Returns a `Instant` object, always in UTC by definition.
) // Returns a legacy `java.util.Date` object. Beware of possible data-loss as any microseconds or nanoseconds in the `Instant` are truncated to milliseconds in this `Date` object.
「簡単」にしたい場合は、Javaにバンドルされている悪名高いjava.util.Dateクラスと.Calendarクラスではなく、Java8の新しいjava.timeパッケージを使用する必要があります。
java.timeの後にJavaの8に組み込まれており、フレームワークが面倒古いjava.util.Date/.Calendarクラスに取って代わります。
LocalDate
クラスは、任意の時刻またはタイムゾーンのない日付のみの値を表すためにjava.timeによって提供されています。たとえば、パリではモントリオールよりも早く新しい日が始まるため、日付を決定するためのタイムゾーンが必要です。ZoneId
クラスは、タイムゾーンのためです。
ZoneId zoneId = ZoneId.of( "Asia/Singapore" );
LocalDate today = LocalDate.now( zoneId );
コンソールにダンプ:
System.out.println ( "today: " + today + " in zone: " + zoneId );
今日:2015-11-26ゾーン:アジア/シンガポール
または、ファクトリメソッドを使用して、年、月、日を指定します。
LocalDate localDate = LocalDate.of( 2014 , Month.FEBRUARY , 11 );
localDate:2014-02-11
または、DayOfWeek
列挙型オブジェクトではなく、月番号1〜12を渡します。
LocalDate localDate = LocalDate.of( 2014 , 2 , 11 );
ALocalDate
は、タイムゾーンに調整するまで実際の意味はありません。java.timeでは、タイムゾーンを適用してZonedDateTime
オブジェクトを生成します。それは時刻も意味しますが、何時ですか?通常、その日の最初の瞬間に行くのは理にかなっています。それは時間を意味すると思うかもしれませんが00:00:00.000
、夏時間(DST)やその他の異常のために、常に正しいとは限りません。その時間を想定する代わりに、java.timeに、を呼び出してその日の最初の瞬間を判別するように依頼しますatStartOfDay
。
指定適切なタイムゾーン名をの形式でcontinent/region
、のようなAmerica/Montreal
、Africa/Casablanca
またはPacific/Auckland
。決してなど3-4文字の略称を使用していないEST
か、IST
そのままではない真の時間帯ではなく、標準化、さらには一意ではありません(!)。
ZoneId zoneId = ZoneId.of( "Asia/Singapore" );
ZonedDateTime zdt = localDate.atStartOfDay( zoneId );
zdt:2014-02-11T00:00 + 08:00 [アジア/シンガポール]
バックエンド作業(ビジネスロジック、データベース、データストレージ、交換)には、通常UTCタイムゾーンを使用します。java.timeでは、Instant
クラスはUTCのタイムライン上の瞬間を表します。Instantオブジェクトは、を呼び出すことでZonedDateTimeから抽出できますtoInstant
。
Instant instant = zdt.toInstant();
インスタント:2014-02-10T16:00:00Z
java.util.Date
クラスを完全に使用することは避けてください。ただし、java.time用にまだ更新されていない古いコードと相互運用する必要がある場合は、前後に変換できます。古いクラスに追加された新しい変換メソッドを探してください。
java.util.Date d = java.util.from( instant ) ;
…そして…
Instant instant = d.toInstant() ;
java.timeフレームワークは、Java8以降に組み込まれています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスをjava.util.Date
、Calendar
、& SimpleDateFormat
。
詳細については、Oracleチュートリアルを参照してください。そして、StackOverflowで多くの例と説明を検索してください。仕様はJSR310です。
ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。
java.timeオブジェクトをデータベースと直接交換できます。JDBC4.2以降に準拠したJDBCドライバーを使用してください。文字列もクラスも必要ありません。Hibernate5およびJPA2.2はjava.timeをサポートします。java.sql.*
java.timeクラスはどこで入手できますか?
更新:Joda -Timeライブラリはメンテナンスモードになり、java.timeクラスへの移行をアドバイスします。私はこのセクションを歴史のために残しておきます。
一つには、Joda-Timeは賢明な番号付けを使用しているため、2月はそうではあり2
ません1
。もう1つ、Joda-Time DateTimeは、タイムゾーンがあるように見えるが、持っていないjava.util.Dateとは異なり、割り当てられたタイムゾーンを本当に知っています。
そして、タイムゾーンを忘れないでください。それ以外の場合は、JVMのデフォルトを取得します。
DateTimeZone timeZone = DateTimeZone.forID( "Asia/Singapore" );
DateTime dateTimeSingapore = new DateTime( 2014, 2, 11, 0, 0, timeZone );
DateTime dateTimeUtc = dateTimeSingapore.withZone( DateTimeZone.UTC );
java.util.Locale locale = new java.util.Locale( "ms", "SG" ); // Language: Bahasa Melayu (?). Country: Singapore.
String output = DateTimeFormat.forStyle( "FF" ).withLocale( locale ).print( dateTimeSingapore );
コンソールにダンプ…
System.out.println( "dateTimeSingapore: " + dateTimeSingapore );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "output: " + output );
実行すると…
dateTimeSingapore: 2014-02-11T00:00:00.000+08:00
dateTimeUtc: 2014-02-10T16:00:00.000Z
output: Selasa, 2014 Februari 11 00:00:00 SGT
他のクラスで使用するためにjava.util.Dateに変換する必要がある場合…
java.util.Date date = dateTimeSingapore.toDate();
new DateTime( 2014, 02, 11, 0, 0, timeZone );
は、おそらく好ましくありません。この場合は機能しますが、パス08
し09
ている場合は8月と9月にはコンパイルされず、intリテラルの前に0を付けると、8進数で表示されます。それは、何年も前に予期しない値を与えることさえあります1000
。たとえばnew DateTime( 0100, 02, 01, 0, 0, timeZone );
、100ADであると予想されるかもしれませんが、実際には64ADです
最善の方法はSimpleDateFormat
オブジェクトを使用することだと思います。
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateString = "2014-02-11";
Date dateObject = sdf.parse(dateString); // Handle the ParseException here
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy HH:mm:ss", Locale.ENGLISH);
//format as u want
try {
String dateStart = "June 14 2018 16:02:37";
cal.setTime(sdf.parse(dateStart));
//all done
} catch (ParseException e) {
e.printStackTrace();
}
Calendar
とSimpleDateFormat
クラスは、何年も前にjava.timeクラスに取って代わられました。2018年にそれらの使用を提案することは悪いアドバイスです。
最も簡単な方法:
Date date = Date.valueOf("2000-1-1");
LocalDate localdate = LocalDate.of(2000,1,1);
LocalDateTime localDateTime = LocalDateTime.of(2000,1,1,0,0);
java.sql.Date
使用しているクラスは設計が不十分で古くなっているため、最初のクラスは避ける必要があります。LocalDate
2行目のように使用することをお勧めします。私の習慣はLocalDate.of(2000, Month.JANUARY, 1)
、読むのが少しはっきりしていると思います。
import java.io.*;
import java.util.*;
import java.util.HashMap;
public class Solution
{
public static void main(String[] args)
{
HashMap<Integer,String> hm = new HashMap<Integer,String>();
hm.put(1,"SUNDAY");
hm.put(2,"MONDAY");
hm.put(3,"TUESDAY");
hm.put(4,"WEDNESDAY");
hm.put(5,"THURSDAY");
hm.put(6,"FRIDAY");
hm.put(7,"SATURDAY");
Scanner in = new Scanner(System.in);
String month = in.next();
String day = in.next();
String year = in.next();
String format = year + "/" + month + "/" + day;
Date date = null;
try
{
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
date = formatter.parse(format);
}
catch(Exception e){
}
Calendar c = Calendar.getInstance();
c.setTime(date);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
System.out.println(hm.get(dayOfWeek));
}
}
あなたの日付はphpから来て、html(dom)に書かれていると思いますか?すべての日付とタイムスタンプを準備するphp関数があります。これにより、必要なフォーメーションが返されます。
$timeForJS = timeop($datetimeFromDatabase['payedon'], 'js', 'local'); // save 10/12/2016 09:20 on var
この形式をjsで使用して、新しい日付を作成できます。
<html>
<span id="test" data-date="<?php echo $timeForJS; ?>"></span>
<script>var myDate = new Date( $('#test').attr('data-date') );</script>
</html>
私が言うことは、あなた自身の機能をラップすることで、あなたの人生をより簡単にすることです。私のfuncをサンプルとして使用できますが、私のcmsに含まれているため、1対1でコピーして貼り付けることはできません:)
function timeop($utcTime, $for, $tz_output = 'system')
{
// echo "<br>Current time ( UTC ): ".$wwm->timeop('now', 'db', 'system');
// echo "<br>Current time (USER): ".$wwm->timeop('now', 'db', 'local');
// echo "<br>Current time (USER): ".$wwm->timeop('now', 'D d M Y H:i:s', 'local');
// echo "<br>Current time with user lang (USER): ".$wwm->timeop('now', 'datetimes', 'local');
// echo '<br><br>Calculator test is users timezone difference != 0! Tested with "2014-06-27 07:46:09"<br>';
// echo "<br>Old time (USER -> UTC): ".$wwm->timeop('2014-06-27 07:46:09', 'db', 'system');
// echo "<br>Old time (UTC -> USER): ".$wwm->timeop('2014-06-27 07:46:09', 'db', 'local');
/** -- */
// echo '<br><br>a Time from db if same with user time?<br>';
// echo "<br>db-time (2019-06-27 07:46:09) time left = ".$wwm->timeleft('2019-06-27 07:46:09', 'max');
// echo "<br>db-time (2014-06-27 07:46:09) time left = ".$wwm->timeleft('2014-06-27 07:46:09', 'max', 'txt');
/** -- */
// echo '<br><br>Calculator test with other formats<br>';
// echo "<br>2014/06/27 07:46:09: ".$wwm->ntimeop('2014/06/27 07:46:09', 'db', 'system');
switch($tz_output){
case 'system':
$tz = 'UTC';
break;
case 'local':
$tz = $_SESSION['wwm']['sett']['tz'];
break;
default:
$tz = $tz_output;
break;
}
$date = new DateTime($utcTime, new DateTimeZone($tz));
if( $tz != 'UTC' ) // Only time converted into different time zone
{
// now check at first the difference in seconds
$offset = $this->tz_offset($tz);
if( $offset != 0 ){
$calc = ( $offset >= 0 ) ? 'add' : 'sub';
// $calc = ( ($_SESSION['wwm']['sett']['tzdiff'] >= 0 AND $tz_output == 'user') OR ($_SESSION['wwm']['sett']['tzdiff'] <= 0 AND $tz_output == 'local') ) ? 'sub' : 'add';
$offset = ['math' => $calc, 'diff' => abs($offset)];
$date->$offset['math']( new DateInterval('PT'.$offset['diff'].'S') ); // php >= 5.3 use add() or sub()
}
}
// create a individual output
switch( $for ){
case 'js':
$format = 'm/d/Y H:i'; // Timepicker use only this format m/d/Y H:i without seconds // Sett automatical seconds default to 00
break;
case 'js:s':
$format = 'm/d/Y H:i:s'; // Timepicker use only this format m/d/Y H:i:s with Seconds
break;
case 'db':
$format = 'Y-m-d H:i:s'; // Database use only this format Y-m-d H:i:s
break;
case 'date':
case 'datetime':
case 'datetimes':
$format = wwmSystem::$languages[$_SESSION['wwm']['sett']['isolang']][$for.'_format']; // language spezific output
break;
default:
$format = $for;
break;
}
$output = $date->format( $format );
/** Replacement
*
* D = day short name
* l = day long name
* F = month long name
* M = month short name
*/
$output = str_replace([
$date->format('D'),
$date->format('l'),
$date->format('F'),
$date->format('M')
],[
$this->trans('date', $date->format('D')),
$this->trans('date', $date->format('l')),
$this->trans('date', $date->format('F')),
$this->trans('date', $date->format('M'))
], $output);
return $output; // $output->getTimestamp();
}