日期专题

package com.yuankai;

import java.sql.Time;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class TestDate {

	public static void main(String[] args) throws ParseException {
		//SimpleDateFormat可以设置格式
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		//SimpleDateFormat将字符串转换为java.util.Date对象
		Date d1 = sdf.parse("2014-06-20 12:00:00");
		//SimpleDateFormat将日期转为字符串形式
		//format方法中的参数同样适应于java.sql.Date和其他子类
		System.out.println(sdf.format(d1));
		
		//得到当前日期和时间
		Calendar c = Calendar.getInstance();
		//昨天
		c.add(Calendar.DATE, -1);
		Date d2 = c.getTime();
		//Date的默认格式
		System.out.println(d2.toString());

		//java.sql.Date和java.sql.Time和java.sql.Timestamp为java.util.Date的子类
		//将java.util.Date转为java.sql.Date,强制转换会出错
		//java.sql.Date d = (java.sql.Date) d1;
		java.sql.Date d3 = new java.sql.Date(d1.getTime());
		//只输出年月日
		System.out.println(d3);
		//按格式输出
		System.out.println(sdf.format(d3));
		//java.sql.Date 只接受yyyy-MM-dd格式的日期
		java.sql.Date d4 = java.sql.Date.valueOf("2013-09-09");
		System.out.println(d4);
		System.out.println(sdf.format(d4));
		
		//java.sql.Time的格式为hh:mm:ss
		Time t = Time.valueOf("12:00:00");
		System.out.println(t.toString());
		System.out.println(sdf.format(t));
		
		//java.sql.Timestamp的格式为 yyyy-mm-dd hh:mm:ss.fffffffff
		Timestamp ts = Timestamp.valueOf("2012-09-09 12:00:00.234");
		System.out.println(ts.toString());
		System.out.println(sdf.format(ts));
	}
	
}


 

 

 

### 回答1: 对于"按出生日期排序(结构体专题)",我们可以通过定义一个结构体来表示每一个人的相关信息,包括姓名、出生日期等等。然后,可以使用快速排序或者其他的排序算法来对这些结构体按照出生日期进行排序,得到一个按照出生日期排好序的人员列表。 ### 回答2: 题目意思是对一组结构体按出生日期排序。我们可以先定义一个结构体,包含姓名和出生日期两个属性: ```c++ struct Person { string name; int year, month, day; }; ``` 接下来,我们需要定义一个比较函数,用于排序。由于涉及到年月日三个维度的比较,稍微有点麻烦。可以按照年份 -> 月份 -> 日份的顺序逐级比较。这样可以保证排序结果是正确的。函数代码如下: ```c++ bool cmp(const Person& a, const Person& b) { if (a.year != b.year) { return a.year < b.year; } if (a.month != b.month) { return a.month < b.month; } return a.day < b.day; } ``` 最后,我们可以调用`sort`函数进行排序: ```c++ int main() { int n; cin >> n; vector<Person> persons(n); for (int i = 0; i < n; i++) { cin >> persons[i].name >> persons[i].year >> persons[i].month >> persons[i].day; } sort(persons.begin(), persons.end(), cmp); for (int i = 0; i < n; i++) { cout << persons[i].name << endl; } return 0; } ``` 完整代码如下: ### 回答3: 1190题让我们实现一个按照出生日期排序的程序,我们需要使用结构体来描述每个人的基本信息,包括姓名、出生年月日等。 对于这个问题,我们可以使用快速排序的思路来实现。首先,我们需要建立一个结构体数组来存储每个人的信息,然后根据出生日期来确定排序依据。我们可以将出生日期转换为一个整数,例如将“1997年8月5日”转换为“19970805”,然后再进行比较大小。 接下来,我们需要实现快速排序的算法来对结构体数组进行排序。快速排序是一种基于分治思想的高效排序算法,其核心思想是通过把一个数组分成两个子数组来解决问题,然后递归地处理子数组。在每一次分割的时候,我们可以选择最左侧的元素作为枢轴元素,然后将所有小于等于枢轴元素的元素放置在左侧子数组中,所有大于枢轴元素的元素放置在右侧子数组中。最后,我们可以将枢轴元素放置在正确的位置上,这样就完成了一次分割操作。 接下来,我们通过代码解释如何实现1190题: ```cpp #include <iostream> #include <algorithm> using namespace std; const int MAX_N = 1005; struct Person { string name; //姓名 int year, month, day; //出生年月日 }p[MAX_N]; bool cmp(Person a, Person b) { int a_val = a.year * 10000 + a.month * 100 + a.day; //将日期转换为数字,方便比较 int b_val = b.year * 10000 + b.month * 100 + b.day; return a_val < b_val; //按照日期升序排序 } void quick_sort(Person *p, int left, int right) { if (left >= right) return; //递归终止条件 int i = left, j = right; Person pivot = p[left]; while (i < j) { while (i < j && cmp(p[j], pivot)) j--; p[i] = p[j]; while (i < j && cmp(pivot, p[i])) i++; p[j] = p[i]; //交换两个元素 } p[i] = pivot; //将枢轴元素放置在正确的位置上 quick_sort(p, left, i - 1); quick_sort(p, i + 1, right); //递归地处理子数组 } int main() { ios::sync_with_stdio(false); //关同步流加速cin输入和cout输出 int n; cin >> n; for (int i = 0; i < n; i++) { cin >> p[i].name >> p[i].year >> p[i].month >> p[i].day; //输入每个人的信息 } quick_sort(p, 0, n - 1); //快速排序 for (int i = 0; i < n; i++) { cout << p[i].name << endl; //输出排序后的结果 } return 0; } ``` 经过以上的代码解释,我们相信大家已经对1190题有了一定的理解。总之,这题需要我们掌握以下两个技巧: 1. 利用结构体来存储每个人的信息; 2. 快速排序算法的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值